move the extension registry down into mini_table/

Now that :minitable depends on :hash, we may as well put the extreg there also.

PiperOrigin-RevId: 490620348
pull/13171/head
Eric Salo 2 years ago committed by Copybara-Service
parent 9c6223c058
commit 4f098fd54c
  1. 38
      BUILD
  2. 72
      upb/extension_registry.h
  3. 2
      upb/fuzz_test_util.cc
  4. 2
      upb/fuzz_test_util.h
  5. 2
      upb/message/internal.h
  6. 2
      upb/mini_table/extension_registry.c
  7. 101
      upb/mini_table/extension_registry.h
  8. 2
      upb/wire/decode.h

38
BUILD

@ -127,6 +127,7 @@ cc_library(
"upb/mem/arena.h", "upb/mem/arena.h",
"upb/message/extension_internal.h", "upb/message/extension_internal.h",
"upb/message/message.h", "upb/message/message.h",
"upb/mini_table/extension_registry.h",
"upb/msg.h", "upb/msg.h",
"upb/status.h", "upb/status.h",
"upb/string_view.h", "upb/string_view.h",
@ -140,7 +141,6 @@ cc_library(
deps = [ deps = [
":base", ":base",
":collections_internal", ":collections_internal",
":extension_registry",
":fastdecode", ":fastdecode",
":hash", ":hash",
":lex", ":lex",
@ -168,30 +168,12 @@ cc_library(
deps = [":port"], deps = [":port"],
) )
cc_library(
name = "extension_registry",
srcs = [
"upb/extension_registry.c",
],
hdrs = [
"upb/extension_registry.h",
],
copts = UPB_DEFAULT_COPTS,
visibility = ["//visibility:public"],
deps = [
":base",
":hash",
":mem",
":mini_table_internal",
":port",
],
)
cc_library( cc_library(
name = "mini_table", name = "mini_table",
hdrs = [ hdrs = [
"upb/mini_table.h", "upb/mini_table.h",
"upb/mini_table/decode.h", "upb/mini_table/decode.h",
"upb/mini_table/extension_registry.h",
"upb/mini_table/types.h", "upb/mini_table/types.h",
], ],
copts = UPB_DEFAULT_COPTS, copts = UPB_DEFAULT_COPTS,
@ -210,6 +192,7 @@ cc_library(
"upb/mini_table/common.c", "upb/mini_table/common.c",
"upb/mini_table/decode.c", "upb/mini_table/decode.c",
"upb/mini_table/encode.c", "upb/mini_table/encode.c",
"upb/mini_table/extension_registry.c",
], ],
hdrs = [ hdrs = [
"upb/mini_table/common.h", "upb/mini_table/common.h",
@ -219,6 +202,7 @@ cc_library(
"upb/mini_table/encode_internal.hpp", "upb/mini_table/encode_internal.hpp",
"upb/mini_table/enum_internal.h", "upb/mini_table/enum_internal.h",
"upb/mini_table/extension_internal.h", "upb/mini_table/extension_internal.h",
"upb/mini_table/extension_registry.h",
"upb/mini_table/field_internal.h", "upb/mini_table/field_internal.h",
"upb/mini_table/file_internal.h", "upb/mini_table/file_internal.h",
"upb/mini_table/message_internal.h", "upb/mini_table/message_internal.h",
@ -263,7 +247,6 @@ cc_library(
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
":base", ":base",
":extension_registry",
":hash", ":hash",
":mem", ":mem",
":mini_table_internal", ":mini_table_internal",
@ -299,7 +282,6 @@ cc_test(
], ],
deps = [ deps = [
":collections_internal", ":collections_internal",
":extension_registry",
":hash", ":hash",
":message_internal", ":message_internal",
":mini_table_internal", ":mini_table_internal",
@ -334,7 +316,6 @@ cc_library(
deps = [ deps = [
":base", ":base",
":collections_internal", ":collections_internal",
":extension_registry",
":hash", ":hash",
":mem_internal", ":mem_internal",
":message_internal", ":message_internal",
@ -484,7 +465,6 @@ cc_library(
visibility = ["//:__subpackages__"], visibility = ["//:__subpackages__"],
deps = [ deps = [
":base", ":base",
":extension_registry",
":hash", ":hash",
":mem", ":mem",
":message_internal", ":message_internal",
@ -1056,9 +1036,9 @@ cc_library(
copts = UPB_DEFAULT_COPTS, copts = UPB_DEFAULT_COPTS,
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
":extension_registry",
":mem", ":mem",
":message_internal", ":message_internal",
":mini_table",
":port", ":port",
":wire_internal", ":wire_internal",
], ],
@ -1085,7 +1065,6 @@ cc_library(
deps = [ deps = [
":base", ":base",
":collections_internal", ":collections_internal",
":extension_registry",
":hash", ":hash",
":mem_internal", ":mem_internal",
":message_internal", ":message_internal",
@ -1147,7 +1126,6 @@ upb_amalgamation(
":base", ":base",
":collections_internal", ":collections_internal",
":descriptor_upb_proto", ":descriptor_upb_proto",
":extension_registry",
":fastdecode", ":fastdecode",
":hash", ":hash",
":lex", ":lex",
@ -1183,7 +1161,6 @@ upb_amalgamation(
":collections_internal", ":collections_internal",
":descriptor_upb_proto", ":descriptor_upb_proto",
":descriptor_upb_proto_reflection", ":descriptor_upb_proto_reflection",
":extension_registry",
":fastdecode", ":fastdecode",
":hash", ":hash",
":json", ":json",
@ -1221,7 +1198,6 @@ upb_amalgamation(
":base", ":base",
":collections_internal", ":collections_internal",
":descriptor_upb_proto", ":descriptor_upb_proto",
":extension_registry",
":fastdecode", ":fastdecode",
":hash", ":hash",
":json", ":json",
@ -1285,9 +1261,7 @@ filegroup(
# compatible_with = ["//buildenv/target:non_prod"], # compatible_with = ["//buildenv/target:non_prod"],
# headers_to_exclude = glob([ # headers_to_exclude = glob([
# "**/*.hpp", # "**/*.hpp",
# ]) + [ # ]),
# "upb/extension_registry.h",
# ],
# no_string_conversion = ["upb_MiniTable_Build"], # no_string_conversion = ["upb_MiniTable_Build"],
# strict_enums = ["upb_FieldType"], # strict_enums = ["upb_FieldType"],
# ) # )

@ -25,77 +25,11 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
// This header is deprecated, use upb/mini_table/extension_registry.h instead
#ifndef UPB_EXTENSION_REGISTRY_H_ #ifndef UPB_EXTENSION_REGISTRY_H_
#define UPB_EXTENSION_REGISTRY_H_ #define UPB_EXTENSION_REGISTRY_H_
#include "upb/mem/arena.h" #include "upb/mini_table/extension_registry.h"
#include "upb/mini_table/types.h"
// Must be last.
#include "upb/port/def.inc"
#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_ExtensionRegistry* upb_ExtensionRegistry_New(upb_Arena* arena);
// 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 determine 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.
const upb_MiniTableExtension* upb_ExtensionRegistry_Lookup(
const upb_ExtensionRegistry* r, const upb_MiniTable* t, uint32_t num);
#ifdef __cplusplus
} /* extern "C" */
#endif
#include "upb/port/undef.inc"
#endif /* UPB_EXTENSION_REGISTRY_H_ */ #endif /* UPB_EXTENSION_REGISTRY_H_ */

@ -27,10 +27,10 @@
#include "upb/fuzz_test_util.h" #include "upb/fuzz_test_util.h"
#include "upb/extension_registry.h"
#include "upb/message/message.h" #include "upb/message/message.h"
#include "upb/mini_table/decode.h" #include "upb/mini_table/decode.h"
#include "upb/mini_table/extension_internal.h" #include "upb/mini_table/extension_internal.h"
#include "upb/mini_table/extension_registry.h"
#include "upb/upb.hpp" #include "upb/upb.hpp"
namespace upb { namespace upb {

@ -31,7 +31,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "upb/extension_registry.h" #include "upb/mini_table/extension_registry.h"
#include "upb/mini_table/types.h" #include "upb/mini_table/types.h"
namespace upb { namespace upb {

@ -38,11 +38,11 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "upb/extension_registry.h"
#include "upb/hash/common.h" #include "upb/hash/common.h"
#include "upb/message/extension_internal.h" #include "upb/message/extension_internal.h"
#include "upb/message/message.h" #include "upb/message/message.h"
#include "upb/mini_table/extension_internal.h" #include "upb/mini_table/extension_internal.h"
#include "upb/mini_table/extension_registry.h"
#include "upb/mini_table/file_internal.h" #include "upb/mini_table/file_internal.h"
#include "upb/mini_table/message_internal.h" #include "upb/mini_table/message_internal.h"

@ -25,7 +25,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include "upb/extension_registry.h" #include "upb/mini_table/extension_registry.h"
#include "upb/hash/str_table.h" #include "upb/hash/str_table.h"
#include "upb/mini_table/extension_internal.h" #include "upb/mini_table/extension_internal.h"

@ -0,0 +1,101 @@
/*
* Copyright (c) 2009-2021, 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.
*/
#ifndef UPB_MINI_TABLE_EXTENSION_REGISTRY_H_
#define UPB_MINI_TABLE_EXTENSION_REGISTRY_H_
#include "upb/mem/arena.h"
#include "upb/mini_table/types.h"
// Must be last.
#include "upb/port/def.inc"
#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_ExtensionRegistry* upb_ExtensionRegistry_New(upb_Arena* arena);
// 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 determine 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.
const upb_MiniTableExtension* upb_ExtensionRegistry_Lookup(
const upb_ExtensionRegistry* r, const upb_MiniTable* t, uint32_t num);
#ifdef __cplusplus
} /* extern "C" */
#endif
#include "upb/port/undef.inc"
#endif /* UPB_MINI_TABLE_EXTENSION_REGISTRY_H_ */

@ -30,9 +30,9 @@
#ifndef UPB_WIRE_DECODE_H_ #ifndef UPB_WIRE_DECODE_H_
#define UPB_WIRE_DECODE_H_ #define UPB_WIRE_DECODE_H_
#include "upb/extension_registry.h"
#include "upb/mem/arena.h" #include "upb/mem/arena.h"
#include "upb/message/message.h" #include "upb/message/message.h"
#include "upb/mini_table/extension_registry.h"
// Must be last. // Must be last.
#include "upb/port/def.inc" #include "upb/port/def.inc"

Loading…
Cancel
Save