Protocol Buffers - Google's data interchange format (grpc依赖) https://developers.google.com/protocol-buffers/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.8 KiB

Created proper `names.h` headers for all upb generators. The goal of the `names.h` convention is to have a single canonical place where a code generator can define the set of symbols it exports to other code generators, and a canonical place where the name mangling logic is implemented. Each upb code generator now has its own `names.h` file defining the symbols that it owns & exports: * `third_party/upb/upb_generator/c/names.h` (for `foo.upb.h` files) * `third_party/upb/upb_generator/minitable/names.h` (for `foo.upb_minitable.h` files) * `third_party/upb/upb_generator/reflection/names.h` (for `foo.upbdefs.h` files) This is a significant improvement over the previous situation where the name mangling functions were co-mingled in `common.h`/`mangle.h`, or sprinkled throughout the generators, with no clear structure for which code generator owns which symbols. With this structure in place, the visibility lists for the various `names.h` files provide a clear dependency graph for how different generators depend on each other. In general, we want to keep dependencies on the "C" code generator to a minimum, since it is the largest and most complicated of upb's generated APIs, and is also the most prone to symbol name clashes. Note that upb's `names.h` headers are somewhat unusual, in that we do not want them to depend on C++'s reflection or upb's reflection. Most `names.h` headers in protobuf would use types like `proto2::Descriptor`, but we don't want upb to depend on C++ reflection, especially during its bootstrapping process. We also don't want to force users to build upb defs just to use these name mangling functions. So we use only plain string types like `absl::string_view` and `std::string`. PiperOrigin-RevId: 672397247
3 months ago
// 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 THIRD_PARTY_UPB_UPB_GENERATOR_MINITABLE_NAMES_H_
#define THIRD_PARTY_UPB_UPB_GENERATOR_MINITABLE_NAMES_H_
#include <string>
#include "absl/strings/string_view.h"
// Must be last.
#include "upb/port/def.inc"
namespace upb {
namespace generator {
// Maps: foo/bar/baz.proto -> foo/bar/baz.upb_minitable.h
UPBC_API std::string MiniTableHeaderFilename(absl::string_view proto_filename);
// These are the publicly visible symbols defined in foo.upb_minitable.h.
// extern const upb_MiniTable <Message>; // One for each message.
// extern const upb_MiniTableEnum <Enum>; // One for each enum.
// extern const upb_MiniTableExtension <Extension>; // One for each ext.
// extern const upb_MiniTableFile <File>; // One for each file.
//
// extern const upb_MiniTable* <MessagePtr>;
UPBC_API std::string MiniTableMessageVarName(absl::string_view full_name);
UPBC_API std::string MiniTableEnumVarName(absl::string_view full_name);
UPBC_API std::string MiniTableExtensionVarName(absl::string_view full_name);
UPBC_API std::string MiniTableFileVarName(absl::string_view proto_filename);
// This is used for weak linking and tree shaking. Other translation units may
// define weak versions of this symbol that point to a dummy message, to
// gracefully degrade the behavior of the generated code when the message is not
// linked into the current binary.
UPBC_API std::string MiniTableMessagePtrVarName(absl::string_view full_name);
} // namespace generator
} // namespace upb
#endif // THIRD_PARTY_UPB_UPB_GENERATOR_MINITABLE_NAMES_H_