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
diff --git a/BUILD b/BUILD
index d4480d1..19a6961 100644
--- a/BUILD
+++ b/BUILD
@@ -127,6 +127,7 @@
         "upb/mem/arena.h",
         "upb/message/extension_internal.h",
         "upb/message/message.h",
+        "upb/mini_table/extension_registry.h",
         "upb/msg.h",
         "upb/status.h",
         "upb/string_view.h",
@@ -140,7 +141,6 @@
     deps = [
         ":base",
         ":collections_internal",
-        ":extension_registry",
         ":fastdecode",
         ":hash",
         ":lex",
@@ -169,29 +169,11 @@
 )
 
 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(
     name = "mini_table",
     hdrs = [
         "upb/mini_table.h",
         "upb/mini_table/decode.h",
+        "upb/mini_table/extension_registry.h",
         "upb/mini_table/types.h",
     ],
     copts = UPB_DEFAULT_COPTS,
@@ -210,6 +192,7 @@
         "upb/mini_table/common.c",
         "upb/mini_table/decode.c",
         "upb/mini_table/encode.c",
+        "upb/mini_table/extension_registry.c",
     ],
     hdrs = [
         "upb/mini_table/common.h",
@@ -219,6 +202,7 @@
         "upb/mini_table/encode_internal.hpp",
         "upb/mini_table/enum_internal.h",
         "upb/mini_table/extension_internal.h",
+        "upb/mini_table/extension_registry.h",
         "upb/mini_table/field_internal.h",
         "upb/mini_table/file_internal.h",
         "upb/mini_table/message_internal.h",
@@ -263,7 +247,6 @@
     visibility = ["//visibility:public"],
     deps = [
         ":base",
-        ":extension_registry",
         ":hash",
         ":mem",
         ":mini_table_internal",
@@ -299,7 +282,6 @@
     ],
     deps = [
         ":collections_internal",
-        ":extension_registry",
         ":hash",
         ":message_internal",
         ":mini_table_internal",
@@ -334,7 +316,6 @@
     deps = [
         ":base",
         ":collections_internal",
-        ":extension_registry",
         ":hash",
         ":mem_internal",
         ":message_internal",
@@ -484,7 +465,6 @@
     visibility = ["//:__subpackages__"],
     deps = [
         ":base",
-        ":extension_registry",
         ":hash",
         ":mem",
         ":message_internal",
@@ -1056,9 +1036,9 @@
     copts = UPB_DEFAULT_COPTS,
     visibility = ["//visibility:public"],
     deps = [
-        ":extension_registry",
         ":mem",
         ":message_internal",
+        ":mini_table",
         ":port",
         ":wire_internal",
     ],
@@ -1085,7 +1065,6 @@
     deps = [
         ":base",
         ":collections_internal",
-        ":extension_registry",
         ":hash",
         ":mem_internal",
         ":message_internal",
@@ -1147,7 +1126,6 @@
         ":base",
         ":collections_internal",
         ":descriptor_upb_proto",
-        ":extension_registry",
         ":fastdecode",
         ":hash",
         ":lex",
@@ -1183,7 +1161,6 @@
         ":collections_internal",
         ":descriptor_upb_proto",
         ":descriptor_upb_proto_reflection",
-        ":extension_registry",
         ":fastdecode",
         ":hash",
         ":json",
@@ -1221,7 +1198,6 @@
         ":base",
         ":collections_internal",
         ":descriptor_upb_proto",
-        ":extension_registry",
         ":fastdecode",
         ":hash",
         ":json",
@@ -1285,9 +1261,7 @@
 #     compatible_with = ["//buildenv/target:non_prod"],
 #     headers_to_exclude = glob([
 #         "**/*.hpp",
-#     ]) + [
-#         "upb/extension_registry.h",
-#     ],
+#     ]),
 #     no_string_conversion = ["upb_MiniTable_Build"],
 #     strict_enums = ["upb_FieldType"],
 # )
diff --git a/upb/extension_registry.h b/upb/extension_registry.h
index 34103dd..5a9564f 100644
--- a/upb/extension_registry.h
+++ b/upb/extension_registry.h
@@ -25,77 +25,11 @@
  * 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_
 #define UPB_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"
+#include "upb/mini_table/extension_registry.h"
 
 #endif /* UPB_EXTENSION_REGISTRY_H_ */
diff --git a/upb/fuzz_test_util.cc b/upb/fuzz_test_util.cc
index fb5f872..f60a0d3 100644
--- a/upb/fuzz_test_util.cc
+++ b/upb/fuzz_test_util.cc
@@ -27,10 +27,10 @@
 
 #include "upb/fuzz_test_util.h"
 
-#include "upb/extension_registry.h"
 #include "upb/message/message.h"
 #include "upb/mini_table/decode.h"
 #include "upb/mini_table/extension_internal.h"
+#include "upb/mini_table/extension_registry.h"
 #include "upb/upb.hpp"
 
 namespace upb {
diff --git a/upb/fuzz_test_util.h b/upb/fuzz_test_util.h
index 10728fd..4e1e968 100644
--- a/upb/fuzz_test_util.h
+++ b/upb/fuzz_test_util.h
@@ -31,7 +31,7 @@
 #include <string>
 #include <vector>
 
-#include "upb/extension_registry.h"
+#include "upb/mini_table/extension_registry.h"
 #include "upb/mini_table/types.h"
 
 namespace upb {
diff --git a/upb/message/internal.h b/upb/message/internal.h
index c7b3897..8dbe673 100644
--- a/upb/message/internal.h
+++ b/upb/message/internal.h
@@ -38,11 +38,11 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "upb/extension_registry.h"
 #include "upb/hash/common.h"
 #include "upb/message/extension_internal.h"
 #include "upb/message/message.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/message_internal.h"
 
diff --git a/upb/extension_registry.c b/upb/mini_table/extension_registry.c
similarity index 98%
rename from upb/extension_registry.c
rename to upb/mini_table/extension_registry.c
index 3765515..de8e05e 100644
--- a/upb/extension_registry.c
+++ b/upb/mini_table/extension_registry.c
@@ -25,7 +25,7 @@
  * 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/mini_table/extension_internal.h"
diff --git a/upb/mini_table/extension_registry.h b/upb/mini_table/extension_registry.h
new file mode 100644
index 0000000..387dd09
--- /dev/null
+++ b/upb/mini_table/extension_registry.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_ */
diff --git a/upb/wire/decode.h b/upb/wire/decode.h
index e004173..31eee25 100644
--- a/upb/wire/decode.h
+++ b/upb/wire/decode.h
@@ -30,9 +30,9 @@
 #ifndef UPB_WIRE_DECODE_H_
 #define UPB_WIRE_DECODE_H_
 
-#include "upb/extension_registry.h"
 #include "upb/mem/arena.h"
 #include "upb/message/message.h"
+#include "upb/mini_table/extension_registry.h"
 
 // Must be last.
 #include "upb/port/def.inc"