Bug 1438278 - Part 3: Rename some files into js/src/gc. r=jonco.
authorJason Orendorff <jorendorff@mozilla.com>
Wed, 14 Feb 2018 16:00:46 -0600
changeset 404289 08702628464616ad69c49390f121e9342e9d625f
parent 404288 249a7398961afcefa7a6c1f2b9172d8c85e9104a
child 404290 3ceed0fcb88258a867879388d84b3a41953da431
push id33459
push userdluca@mozilla.com
push dateSat, 17 Feb 2018 09:56:03 +0000
treeherdermozilla-central@dde7eb1a589f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjonco
bugs1438278
milestone60.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1438278 - Part 3: Rename some files into js/src/gc. r=jonco. jsgc.* -> gc/GC.* jshashutil.h -> gc/HashUtil.h jsweakmap.* -> gc/WeakMap.* vm/WeakMapPtr.cpp -> gc/WeakMapPtr.cpp
js/public/WeakMapPtr.h
js/src/builtin/Eval.cpp
js/src/builtin/TypedObject.h
js/src/builtin/WeakMapObject.h
js/src/gc/AtomMarking.cpp
js/src/gc/GC-inl.h
js/src/gc/GC.cpp
js/src/gc/GC.h
js/src/gc/GCRuntime.h
js/src/gc/HashUtil.h
js/src/gc/Marking.cpp
js/src/gc/PrivateIterators-inl.h
js/src/gc/Statistics.cpp
js/src/gc/StoreBuffer.cpp
js/src/gc/Tracer.cpp
js/src/gc/Verifier.cpp
js/src/gc/WeakMap.cpp
js/src/gc/WeakMap.h
js/src/gc/WeakMapPtr.cpp
js/src/gc/Zone.cpp
js/src/gc/Zone.h
js/src/irregexp/RegExpParser.cpp
js/src/jit/CompileWrappers.cpp
js/src/jit/Linker.cpp
js/src/jit/SharedIC.h
js/src/jsapi-tests/testGCGrayMarking.cpp
js/src/jsapi-tests/tests.h
js/src/jsapi.cpp
js/src/jsfriendapi.cpp
js/src/jsgc.cpp
js/src/jsgc.h
js/src/jsgcinlines.h
js/src/jshashutil.h
js/src/jsweakmap.cpp
js/src/jsweakmap.h
js/src/moz.build
js/src/vm/Debugger.cpp
js/src/vm/Debugger.h
js/src/vm/EnvironmentObject.h
js/src/vm/JSCompartment.cpp
js/src/vm/JSCompartment.h
js/src/vm/JSScript.h
js/src/vm/MemoryMetrics.cpp
js/src/vm/ObjectGroup.cpp
js/src/vm/RegExpObject.cpp
js/src/vm/Runtime.cpp
js/src/vm/Runtime.h
js/src/vm/SavedStacks.cpp
js/src/vm/SelfHosting.cpp
js/src/vm/Shape.cpp
js/src/vm/TypeInference-inl.h
js/src/vm/TypeInference.cpp
js/src/vm/WeakMapPtr.cpp
--- a/js/public/WeakMapPtr.h
+++ b/js/public/WeakMapPtr.h
@@ -11,19 +11,19 @@
 
 #include "js/TypeDecls.h"
 
 namespace JS {
 
 // A wrapper around the internal C++ representation of SpiderMonkey WeakMaps,
 // usable outside the engine.
 //
-// The supported template specializations are enumerated in WeakMapPtr.cpp. If
-// you want to use this class for a different key/value combination, add it to
-// the list and the compiler will generate the relevant machinery.
+// The supported template specializations are enumerated in gc/WeakMapPtr.cpp.
+// If you want to use this class for a different key/value combination, add it
+// to the list and the compiler will generate the relevant machinery.
 template <typename K, typename V>
 class JS_PUBLIC_API(WeakMapPtr)
 {
   public:
     WeakMapPtr() : ptr(nullptr) {}
     bool init(JSContext* cx);
     bool initialized() { return ptr != nullptr; }
     void destroy();
--- a/js/src/builtin/Eval.cpp
+++ b/js/src/builtin/Eval.cpp
@@ -4,19 +4,18 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "builtin/Eval.h"
 
 #include "mozilla/HashFunctions.h"
 #include "mozilla/Range.h"
 
-#include "jshashutil.h"
-
 #include "frontend/BytecodeCompiler.h"
+#include "gc/HashUtil.h"
 #include "vm/Debugger.h"
 #include "vm/GlobalObject.h"
 #include "vm/JSContext.h"
 #include "vm/JSONParser.h"
 
 #include "vm/Interpreter-inl.h"
 
 using namespace js;
--- a/js/src/builtin/TypedObject.h
+++ b/js/src/builtin/TypedObject.h
@@ -2,19 +2,18 @@
  * vim: set ts=8 sts=4 et sw=4 tw=99:
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef builtin_TypedObject_h
 #define builtin_TypedObject_h
 
-#include "jsweakmap.h"
-
 #include "builtin/TypedObjectConstants.h"
+#include "gc/WeakMap.h"
 #include "js/Conversions.h"
 #include "vm/ArrayBufferObject.h"
 #include "vm/JSObject.h"
 #include "vm/ShapedObject.h"
 
 /*
  * -------------
  * Typed Objects
--- a/js/src/builtin/WeakMapObject.h
+++ b/js/src/builtin/WeakMapObject.h
@@ -2,18 +2,17 @@
  * vim: set ts=8 sts=4 et sw=4 tw=99:
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef builtin_WeakMapObject_h
 #define builtin_WeakMapObject_h
 
-#include "jsweakmap.h"
-
+#include "gc/WeakMap.h"
 #include "vm/JSObject.h"
 
 namespace js {
 
 // Abstract base class for WeakMapObject and WeakSetObject.
 class WeakCollectionObject : public NativeObject
 {
   public:
--- a/js/src/gc/AtomMarking.cpp
+++ b/js/src/gc/AtomMarking.cpp
@@ -4,17 +4,17 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "gc/AtomMarking-inl.h"
 
 #include "gc/PublicIterators.h"
 #include "vm/JSCompartment.h"
 
-#include "jsgcinlines.h"
+#include "gc/GC-inl.h"
 #include "gc/Heap-inl.h"
 
 namespace js {
 namespace gc {
 
 // Atom Marking Overview
 //
 // Things in the atoms zone (which includes atomized strings and other things,
rename from js/src/jsgcinlines.h
rename to js/src/gc/GC-inl.h
--- a/js/src/jsgcinlines.h
+++ b/js/src/gc/GC-inl.h
@@ -1,18 +1,18 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 * vim: set ts=8 sts=4 et sw=4 tw=99:
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-#ifndef jsgcinlines_h
-#define jsgcinlines_h
+#ifndef gc_GC_inl_h
+#define gc_GC_inl_h
 
-#include "jsgc.h"
+#include "gc/GC.h"
 
 #include "mozilla/DebugOnly.h"
 #include "mozilla/Maybe.h"
 
 #include "gc/Zone.h"
 
 #include "gc/ArenaList-inl.h"
 
@@ -343,9 +343,9 @@ class ZoneCellIter : public ZoneCellIter
     GCType* get() const { return ZoneCellIter<TenuredCell>::get<GCType>(); }
     operator GCType*() const { return get(); }
     GCType* operator ->() const { return get(); }
 };
 
 } /* namespace gc */
 } /* namespace js */
 
-#endif /* jsgcinlines_h */
+#endif /* gc_GC_inl_h */
rename from js/src/jsgc.cpp
rename to js/src/gc/GC.cpp
--- a/js/src/jsgc.cpp
+++ b/js/src/gc/GC.cpp
@@ -180,17 +180,17 @@
  * Atoms are collected differently from other GC things. They are contained in
  * a special zone and things in other zones may have pointers to them that are
  * not recorded in the cross compartment pointer map. Each zone holds a bitmap
  * with the atoms it might be keeping alive, and atoms are only collected if
  * they are not included in any zone's atom bitmap. See AtomMarking.cpp for how
  * this bitmap is managed.
  */
 
-#include "jsgcinlines.h"
+#include "gc/GC-inl.h"
 
 #include "mozilla/ArrayUtils.h"
 #include "mozilla/DebugOnly.h"
 #include "mozilla/MacroForEach.h"
 #include "mozilla/MemoryReporting.h"
 #include "mozilla/Move.h"
 #include "mozilla/ScopeExit.h"
 #include "mozilla/TimeStamp.h"
@@ -205,27 +205,27 @@
 # include <unistd.h>
 #endif
 
 #include "jsapi.h"
 #include "jsfriendapi.h"
 #include "jsprf.h"
 #include "jstypes.h"
 #include "jsutil.h"
-#include "jsweakmap.h"
 #ifdef XP_WIN
 # include "jswin.h"
 #endif
 
 #include "gc/FindSCCs.h"
 #include "gc/FreeOp.h"
 #include "gc/GCInternals.h"
 #include "gc/GCTrace.h"
 #include "gc/Memory.h"
 #include "gc/Policy.h"
+#include "gc/WeakMap.h"
 #include "jit/BaselineJIT.h"
 #include "jit/IonCode.h"
 #include "jit/JitcodeMap.h"
 #include "js/SliceBudget.h"
 #include "proxy/DeadObjectProxy.h"
 #include "vm/Debugger.h"
 #include "vm/GeckoProfiler.h"
 #include "vm/JSAtom.h"
rename from js/src/jsgc.h
rename to js/src/gc/GC.h
--- a/js/src/jsgc.h
+++ b/js/src/gc/GC.h
@@ -3,18 +3,18 @@
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /*
  * JS engine garbage collector API.
  */
 
-#ifndef jsgc_h
-#define jsgc_h
+#ifndef gc_GC_h
+#define gc_GC_h
 
 #include "jsapi.h"
 
 #include "gc/AllocKind.h"
 #include "gc/GCEnum.h"
 #include "js/TraceKind.h"
 
 class JSExternalString;
@@ -139,17 +139,17 @@ MergeCompartments(JSCompartment* source,
 enum VerifierType {
     PreBarrierVerifier
 };
 
 #ifdef JS_GC_ZEAL
 
 extern const char* ZealModeHelpText;
 
-/* Check that write barriers have been used correctly. See jsgc.cpp. */
+/* Check that write barriers have been used correctly. See gc/Verifier.cpp. */
 void
 VerifyBarriers(JSRuntime* rt, VerifierType type);
 
 void
 MaybeVerifyBarriers(JSContext* cx, bool always = false);
 
 void DumpArenaInfo();
 
@@ -209,9 +209,9 @@ struct MOZ_RAII AutoDisableCompactingGC
 };
 
 // This is the same as IsInsideNursery, but not inlined.
 bool
 UninlinedIsInsideNursery(const gc::Cell* cell);
 
 } /* namespace js */
 
-#endif /* jsgc_h */
+#endif /* gc_GC_h */
--- a/js/src/gc/GCRuntime.h
+++ b/js/src/gc/GCRuntime.h
@@ -892,17 +892,17 @@ class GCRuntime
      *   - Call gczeal() or schedulegc() from inside shell-executed JS code
      *     (see the help for details)
      *
      * If gcZeal_ == 1 then we perform GCs in select places (during MaybeGC and
      * whenever we are notified that GC roots have been removed). This option is
      * mainly useful to embedders.
      *
      * We use zeal_ == 4 to enable write barrier verification. See the comment
-     * in jsgc.cpp for more information about this.
+     * in gc/Verifier.cpp for more information about this.
      *
      * zeal_ values from 8 to 10 periodically run different types of
      * incremental GC.
      *
      * zeal_ value 14 performs periodic shrinking collections.
      */
 #ifdef JS_GC_ZEAL
     ActiveThreadData<uint32_t> zealModeBits;
rename from js/src/jshashutil.h
rename to js/src/gc/HashUtil.h
--- a/js/src/jshashutil.h
+++ b/js/src/gc/HashUtil.h
@@ -1,16 +1,16 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  * vim: set ts=8 sts=4 et sw=4 tw=99:
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-#ifndef jshashutil_h
-#define jshashutil_h
+#ifndef gc_HashUtil_h
+#define gc_HashUtil_h
 
 #include "gc/Zone.h"
 #include "vm/JSContext.h"
 
 namespace js {
 
 /*
  * Used to add entries to a js::HashMap or HashSet where the key depends on a GC
--- a/js/src/gc/Marking.cpp
+++ b/js/src/gc/Marking.cpp
@@ -28,18 +28,17 @@
 #include "vm/RegExpShared.h"
 #include "vm/Scope.h"
 #include "vm/Shape.h"
 #include "vm/Symbol.h"
 #include "vm/TypedArrayObject.h"
 #include "vm/UnboxedObject.h"
 #include "wasm/WasmJS.h"
 
-#include "jsgcinlines.h"
-
+#include "gc/GC-inl.h"
 #include "gc/Nursery-inl.h"
 #include "gc/PrivateIterators-inl.h"
 #include "vm/JSCompartment-inl.h"
 #include "vm/NativeObject-inl.h"
 #include "vm/String-inl.h"
 #include "vm/UnboxedObject-inl.h"
 
 using namespace js;
--- a/js/src/gc/PrivateIterators-inl.h
+++ b/js/src/gc/PrivateIterators-inl.h
@@ -8,17 +8,17 @@
  * GC-internal iterators for various data structures.
  */
 
 #ifndef gc_PrivateIterators_inl_h
 #define gc_PrivateIterators_inl_h
 
 #include "gc/PublicIterators.h"
 
-#include "jsgcinlines.h"
+#include "gc/GC-inl.h"
 
 namespace js {
 namespace gc {
 
 class ArenaCellIterUnderGC : public ArenaCellIterImpl
 {
   public:
     explicit ArenaCellIterUnderGC(Arena* arena)
--- a/js/src/gc/Statistics.cpp
+++ b/js/src/gc/Statistics.cpp
@@ -12,20 +12,20 @@
 #include "mozilla/PodOperations.h"
 #include "mozilla/Sprintf.h"
 #include "mozilla/TimeStamp.h"
 
 #include <ctype.h>
 #include <stdarg.h>
 #include <stdio.h>
 
-#include "jsgc.h"
 #include "jsprf.h"
 #include "jsutil.h"
 
+#include "gc/GC.h"
 #include "gc/Memory.h"
 #include "vm/Debugger.h"
 #include "vm/HelperThreads.h"
 #include "vm/Runtime.h"
 #include "vm/Time.h"
 
 using namespace js;
 using namespace js::gc;
--- a/js/src/gc/StoreBuffer.cpp
+++ b/js/src/gc/StoreBuffer.cpp
@@ -7,17 +7,17 @@
 #include "gc/StoreBuffer-inl.h"
 
 #include "mozilla/Assertions.h"
 
 #include "gc/Statistics.h"
 #include "vm/ArgumentsObject.h"
 #include "vm/Runtime.h"
 
-#include "jsgcinlines.h"
+#include "gc/GC-inl.h"
 
 using namespace js;
 using namespace js::gc;
 
 void
 StoreBuffer::GenericBuffer::trace(StoreBuffer* owner, JSTracer* trc)
 {
     mozilla::ReentrancyGuard g(*owner);
--- a/js/src/gc/Tracer.cpp
+++ b/js/src/gc/Tracer.cpp
@@ -16,18 +16,17 @@
 #include "gc/Marking.h"
 #include "gc/PublicIterators.h"
 #include "gc/Zone.h"
 #include "vm/JSFunction.h"
 #include "vm/JSScript.h"
 #include "vm/Shape.h"
 #include "vm/Symbol.h"
 
-#include "jsgcinlines.h"
-
+#include "gc/GC-inl.h"
 #include "vm/JSCompartment-inl.h"
 #include "vm/ObjectGroup-inl.h"
 
 using namespace js;
 using namespace js::gc;
 using mozilla::DebugOnly;
 
 namespace js {
--- a/js/src/gc/Verifier.cpp
+++ b/js/src/gc/Verifier.cpp
@@ -15,18 +15,17 @@
 #include "jsprf.h"
 
 #include "gc/GCInternals.h"
 #include "gc/PublicIterators.h"
 #include "gc/Zone.h"
 #include "js/HashTable.h"
 #include "vm/JSContext.h"
 
-#include "jsgcinlines.h"
-
+#include "gc/GC-inl.h"
 #include "gc/Marking-inl.h"
 #include "vm/JSContext-inl.h"
 
 using namespace js;
 using namespace js::gc;
 
 #ifdef JS_GC_ZEAL
 
rename from js/src/jsweakmap.cpp
rename to js/src/gc/WeakMap.cpp
--- a/js/src/jsweakmap.cpp
+++ b/js/src/gc/WeakMap.cpp
@@ -1,15 +1,15 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  * vim: set ts=8 sts=4 et sw=4 tw=99:
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-#include "jsweakmap.h"
+#include "gc/WeakMap.h"
 
 #include <string.h>
 
 #include "jsapi.h"
 #include "jsfriendapi.h"
 #include "jswrapper.h"
 
 #include "gc/PublicIterators.h"
rename from js/src/jsweakmap.h
rename to js/src/gc/WeakMap.h
--- a/js/src/jsweakmap.h
+++ b/js/src/gc/WeakMap.h
@@ -1,16 +1,16 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  * vim: set ts=8 sts=4 et sw=4 tw=99:
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-#ifndef jsweakmap_h
-#define jsweakmap_h
+#ifndef gc_WeakMap_h
+#define gc_WeakMap_h
 
 #include "mozilla/LinkedList.h"
 #include "mozilla/Move.h"
 
 #include "jsfriendapi.h"
 
 #include "gc/DeletePolicy.h"
 #include "gc/StoreBuffer.h"
@@ -409,9 +409,9 @@ class ObjectWeakMap
 namespace JS {
 
 template <>
 struct DeletePolicy<js::ObjectValueMap> : public js::GCManagedDeletePolicy<js::ObjectValueMap>
 {};
 
 } /* namespace JS */
 
-#endif /* jsweakmap_h */
+#endif /* gc_WeakMap_h */
rename from js/src/vm/WeakMapPtr.cpp
rename to js/src/gc/WeakMapPtr.cpp
--- a/js/src/vm/WeakMapPtr.cpp
+++ b/js/src/gc/WeakMapPtr.cpp
@@ -1,17 +1,17 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  * vim: set ts=8 sts=4 et sw=4 tw=99:
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "js/WeakMapPtr.h"
 
-#include "jsweakmap.h"
+#include "gc/WeakMap.h"
 
 //
 // Machinery for the externally-linkable JS::WeakMapPtr, which wraps js::WeakMap
 // for a few public data types.
 //
 
 using namespace js;
 
--- a/js/src/gc/Zone.cpp
+++ b/js/src/gc/Zone.cpp
@@ -9,18 +9,17 @@
 #include "gc/Policy.h"
 #include "gc/PublicIterators.h"
 #include "jit/BaselineJIT.h"
 #include "jit/Ion.h"
 #include "jit/JitCompartment.h"
 #include "vm/Debugger.h"
 #include "vm/Runtime.h"
 
-#include "jsgcinlines.h"
-
+#include "gc/GC-inl.h"
 #include "gc/Marking-inl.h"
 #include "vm/JSCompartment-inl.h"
 
 using namespace js;
 using namespace js::gc;
 
 Zone * const Zone::NotOnList = reinterpret_cast<Zone*>(1);
 
--- a/js/src/gc/Zone.h
+++ b/js/src/gc/Zone.h
@@ -173,17 +173,17 @@ struct Zone : public JS::shadow::Zone,
                                 size_t* jitZone,
                                 size_t* baselineStubsOptimized,
                                 size_t* cachedCFG,
                                 size_t* uniqueIdMap,
                                 size_t* shapeTables,
                                 size_t* atomsMarkBitmaps);
 
     // Iterate over all cells in the zone. See the definition of ZoneCellIter
-    // in jsgcinlines.h for the possible arguments and documentation.
+    // in gc/GC-inl.h for the possible arguments and documentation.
     template <typename T, typename... Args>
     js::gc::ZoneCellIter<T> cellIter(Args&&... args) {
         return js::gc::ZoneCellIter<T>(const_cast<Zone*>(this), mozilla::Forward<Args>(args)...);
     }
 
     MOZ_MUST_USE void* onOutOfMemory(js::AllocFunction allocFunc, size_t nbytes,
                                      void* reallocPtr = nullptr) {
         if (!js::CurrentThreadCanAccessRuntime(runtime_))
--- a/js/src/irregexp/RegExpParser.cpp
+++ b/js/src/irregexp/RegExpParser.cpp
@@ -28,19 +28,18 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #include "irregexp/RegExpParser.h"
 
 #include "mozilla/ArrayUtils.h"
 #include "mozilla/Move.h"
 
-#include "jsgc.h"
-
 #include "frontend/TokenStream.h"
+#include "gc/GC.h"
 #include "irregexp/RegExpCharacters.h"
 #include "vm/ErrorReporting.h"
 #include "vm/StringBuffer.h"
 
 using namespace js;
 using namespace js::irregexp;
 
 using mozilla::Move;
--- a/js/src/jit/CompileWrappers.cpp
+++ b/js/src/jit/CompileWrappers.cpp
@@ -1,16 +1,17 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  * vim: set ts=8 sts=4 et sw=4 tw=99:
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-#include "jsgc.h"
+#include "jit/CompileWrappers.h"
 
+#include "gc/GC.h"
 #include "jit/Ion.h"
 #include "jit/JitCompartment.h"
 
 #include "vm/JSCompartment-inl.h"
 
 using namespace js;
 using namespace js::jit;
 
--- a/js/src/jit/Linker.cpp
+++ b/js/src/jit/Linker.cpp
@@ -1,17 +1,17 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  * vim: set ts=8 sts=4 et sw=4 tw=99:
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "jit/Linker.h"
 
-#include "jsgc.h"
+#include "gc/GC.h"
 
 #include "gc/StoreBuffer-inl.h"
 
 namespace js {
 namespace jit {
 
 template <AllowGC allowGC>
 JitCode*
--- a/js/src/jit/SharedIC.h
+++ b/js/src/jit/SharedIC.h
@@ -2,18 +2,17 @@
  * vim: set ts=8 sts=4 et sw=4 tw=99:
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef jit_SharedIC_h
 #define jit_SharedIC_h
 
-#include "jsgc.h"
-
+#include "gc/GC.h"
 #include "jit/BaselineICList.h"
 #include "jit/BaselineJIT.h"
 #include "jit/ICState.h"
 #include "jit/MacroAssembler.h"
 #include "jit/SharedICList.h"
 #include "jit/SharedICRegisters.h"
 #include "vm/JSCompartment.h"
 #include "vm/JSContext.h"
--- a/js/src/jsapi-tests/testGCGrayMarking.cpp
+++ b/js/src/jsapi-tests/testGCGrayMarking.cpp
@@ -1,20 +1,18 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 * vim: set ts=8 sts=4 et sw=4 tw=99:
 */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-#include "jsweakmap.h"
-
 #include "gc/Heap.h"
+#include "gc/WeakMap.h"
 #include "gc/Zone.h"
-
 #include "jsapi-tests/tests.h"
 
 using namespace js;
 using namespace js::gc;
 
 namespace JS {
 
 template <>
--- a/js/src/jsapi-tests/tests.h
+++ b/js/src/jsapi-tests/tests.h
@@ -11,18 +11,18 @@
 #include "mozilla/TypeTraits.h"
 
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
 #include "jsalloc.h"
-#include "jsgc.h"
 
+#include "gc/GC.h"
 #include "js/Vector.h"
 #include "vm/JSContext.h"
 
 /* Note: Aborts on OOM. */
 class JSAPITestString {
     js::Vector<char, 0, js::SystemAllocPolicy> chars;
 
   public:
--- a/js/src/jsapi.cpp
+++ b/js/src/jsapi.cpp
@@ -30,17 +30,16 @@
 #include "jsfriendapi.h"
 #include "jsiter.h"
 #include "jsmath.h"
 #include "jsnum.h"
 #include "jsprf.h"
 #include "jsstr.h"
 #include "jstypes.h"
 #include "jsutil.h"
-#include "jsweakmap.h"
 #include "jswrapper.h"
 
 #include "builtin/AtomicsObject.h"
 #include "builtin/Eval.h"
 #include "builtin/JSON.h"
 #include "builtin/MapObject.h"
 #include "builtin/Promise.h"
 #include "builtin/RegExp.h"
@@ -54,16 +53,17 @@
 #endif
 #include "frontend/BytecodeCompiler.h"
 #include "frontend/FullParseHandler.h"  // for JS_BufferIsCompileableUnit
 #include "frontend/Parser.h" // for JS_BufferIsCompileableUnit
 #include "gc/FreeOp.h"
 #include "gc/Marking.h"
 #include "gc/Policy.h"
 #include "gc/PublicIterators.h"
+#include "gc/WeakMap.h"
 #include "jit/JitCommon.h"
 #include "js/CharacterEncoding.h"
 #include "js/Conversions.h"
 #include "js/Date.h"
 #include "js/Initialization.h"
 #include "js/Proxy.h"
 #include "js/SliceBudget.h"
 #include "js/StructuredClone.h"
--- a/js/src/jsfriendapi.cpp
+++ b/js/src/jsfriendapi.cpp
@@ -6,23 +6,23 @@
 
 #include "jsfriendapi.h"
 
 #include "mozilla/PodOperations.h"
 
 #include <stdint.h>
 
 #include "jsprf.h"
-#include "jsweakmap.h"
 #include "jswrapper.h"
 
 #include "builtin/Promise.h"
 #include "builtin/TestingFunctions.h"
 #include "gc/GCInternals.h"
 #include "gc/PublicIterators.h"
+#include "gc/WeakMap.h"
 #include "js/Proxy.h"
 #include "proxy/DeadObjectProxy.h"
 #include "vm/ArgumentsObject.h"
 #include "vm/JSCompartment.h"
 #include "vm/JSContext.h"
 #include "vm/JSObject.h"
 #include "vm/Time.h"
 #include "vm/WrapperObject.h"
--- a/js/src/moz.build
+++ b/js/src/moz.build
@@ -23,17 +23,17 @@ with Files('builtin/**'):
 with Files('ctypes/**'):
     BUG_COMPONENT = ('Core', 'js-ctypes')
 with Files('gc/**'):
     BUG_COMPONENT = component_gc
 with Files('jit/**'):
     BUG_COMPONENT = component_jit
 
 # File-specific metadata
-for gcfile in ['jsgc*', 'devtools/rootAnalysis', 'devtools/gc-ubench', 'devtools/gctrace']:
+for gcfile in ['devtools/rootAnalysis', 'devtools/gc-ubench', 'devtools/gctrace']:
     with Files(gcfile):
         BUG_COMPONENT = component_gc
 
 for stlfile in ['jsarray.*', 'jsbool*', 'jsdate.*', 'jsnum.*', 'jsstr.*']:
     with Files(stlfile):
         BUG_COMPONENT = component_stl
 
 with Files('builtin/intl/*'):
@@ -188,25 +188,28 @@ UNIFIED_SOURCES += [
     'frontend/BytecodeEmitter.cpp',
     'frontend/FoldConstants.cpp',
     'frontend/NameFunctions.cpp',
     'frontend/ParseNode.cpp',
     'frontend/TokenStream.cpp',
     'gc/Allocator.cpp',
     'gc/AtomMarking.cpp',
     'gc/Barrier.cpp',
+    'gc/GC.cpp',
     'gc/GCTrace.cpp',
     'gc/Marking.cpp',
     'gc/Memory.cpp',
     'gc/Nursery.cpp',
     'gc/PublicIterators.cpp',
     'gc/RootMarking.cpp',
     'gc/Statistics.cpp',
     'gc/Tracer.cpp',
     'gc/Verifier.cpp',
+    'gc/WeakMap.cpp',
+    'gc/WeakMapPtr.cpp',
     'gc/Zone.cpp',
     'gc/ZoneGroup.cpp',
     'irregexp/NativeRegExpMacroAssembler.cpp',
     'irregexp/RegExpAST.cpp',
     'irregexp/RegExpCharacters.cpp',
     'irregexp/RegExpEngine.cpp',
     'irregexp/RegExpInterpreter.cpp',
     'irregexp/RegExpMacroAssembler.cpp',
@@ -290,24 +293,22 @@ UNIFIED_SOURCES += [
     'jit/VMFunctions.cpp',
     'jit/WasmBCE.cpp',
     'jsalloc.cpp',
     'jsapi.cpp',
     'jsbool.cpp',
     'jsdate.cpp',
     'jsexn.cpp',
     'jsfriendapi.cpp',
-    'jsgc.cpp',
     'jsiter.cpp',
     'jsnativestack.cpp',
     'jsnum.cpp',
     'jsopcode.cpp',
     'jsprf.cpp',
     'jsstr.cpp',
-    'jsweakmap.cpp',
     'perf/jsperf.cpp',
     'proxy/BaseProxyHandler.cpp',
     'proxy/CrossCompartmentWrapper.cpp',
     'proxy/DeadObjectProxy.cpp',
     'proxy/OpaqueCrossCompartmentWrapper.cpp',
     'proxy/Proxy.cpp',
     'proxy/ScriptedProxyHandler.cpp',
     'proxy/SecurityWrapper.cpp',
@@ -372,17 +373,16 @@ UNIFIED_SOURCES += [
     'vm/TypedArrayObject.cpp',
     'vm/TypeInference.cpp',
     'vm/UbiNode.cpp',
     'vm/UbiNodeCensus.cpp',
     'vm/UbiNodeShortestPaths.cpp',
     'vm/UnboxedObject.cpp',
     'vm/Unicode.cpp',
     'vm/Value.cpp',
-    'vm/WeakMapPtr.cpp',
     'vm/Xdr.cpp',
     'wasm/AsmJS.cpp',
     'wasm/WasmBaselineCompile.cpp',
     'wasm/WasmBinaryIterator.cpp',
     'wasm/WasmBinaryToAST.cpp',
     'wasm/WasmBinaryToText.cpp',
     'wasm/WasmBuiltins.cpp',
     'wasm/WasmCode.cpp',
--- a/js/src/vm/Debugger.cpp
+++ b/js/src/vm/Debugger.cpp
@@ -7,24 +7,24 @@
 #include "vm/Debugger-inl.h"
 
 #include "mozilla/DebugOnly.h"
 #include "mozilla/ScopeExit.h"
 #include "mozilla/Sprintf.h"
 #include "mozilla/TypeTraits.h"
 
 #include "jsfriendapi.h"
-#include "jshashutil.h"
 #include "jsnum.h"
 #include "jsprf.h"
 #include "jswrapper.h"
 
 #include "frontend/BytecodeCompiler.h"
 #include "frontend/Parser.h"
 #include "gc/FreeOp.h"
+#include "gc/HashUtil.h"
 #include "gc/Marking.h"
 #include "gc/Policy.h"
 #include "gc/PublicIterators.h"
 #include "jit/BaselineDebugModeOSR.h"
 #include "jit/BaselineJIT.h"
 #include "js/Date.h"
 #include "js/UbiNodeBreadthFirst.h"
 #include "js/Vector.h"
@@ -37,19 +37,19 @@
 #include "vm/GeneratorObject.h"
 #include "vm/JSCompartment.h"
 #include "vm/JSContext.h"
 #include "vm/JSObject.h"
 #include "vm/TraceLogging.h"
 #include "vm/WrapperObject.h"
 #include "wasm/WasmInstance.h"
 
-#include "jsgcinlines.h"
 #include "jsopcodeinlines.h"
 
+#include "gc/GC-inl.h"
 #include "vm/GeckoProfiler-inl.h"
 #include "vm/JSObject-inl.h"
 #include "vm/JSScript-inl.h"
 #include "vm/NativeObject-inl.h"
 #include "vm/Stack-inl.h"
 
 using namespace js;
 
--- a/js/src/vm/Debugger.h
+++ b/js/src/vm/Debugger.h
@@ -9,22 +9,22 @@
 
 #include "mozilla/DoublyLinkedList.h"
 #include "mozilla/GuardObjects.h"
 #include "mozilla/LinkedList.h"
 #include "mozilla/Range.h"
 #include "mozilla/TimeStamp.h"
 #include "mozilla/Vector.h"
 
-#include "jsweakmap.h"
 #include "jswrapper.h"
 
 #include "builtin/Promise.h"
 #include "ds/TraceableFifo.h"
 #include "gc/Barrier.h"
+#include "gc/WeakMap.h"
 #include "js/Debug.h"
 #include "js/GCVariant.h"
 #include "js/HashTable.h"
 #include "vm/GlobalObject.h"
 #include "vm/JSCompartment.h"
 #include "vm/JSContext.h"
 #include "vm/SavedStacks.h"
 #include "wasm/WasmJS.h"
--- a/js/src/vm/EnvironmentObject.h
+++ b/js/src/vm/EnvironmentObject.h
@@ -2,21 +2,20 @@
  * vim: set ts=8 sts=4 et sw=4 tw=99:
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef vm_EnvironmentObject_h
 #define vm_EnvironmentObject_h
 
-#include "jsweakmap.h"
-
 #include "builtin/ModuleObject.h"
 #include "frontend/NameAnalysisTypes.h"
 #include "gc/Barrier.h"
+#include "gc/WeakMap.h"
 #include "js/GCHashTable.h"
 #include "vm/ArgumentsObject.h"
 #include "vm/JSContext.h"
 #include "vm/JSObject.h"
 #include "vm/ProxyObject.h"
 #include "vm/Scope.h"
 
 namespace js {
--- a/js/src/vm/JSCompartment.cpp
+++ b/js/src/vm/JSCompartment.cpp
@@ -22,18 +22,17 @@
 #include "js/Date.h"
 #include "js/Proxy.h"
 #include "js/RootingAPI.h"
 #include "proxy/DeadObjectProxy.h"
 #include "vm/Debugger.h"
 #include "vm/JSContext.h"
 #include "vm/WrapperObject.h"
 
-#include "jsgcinlines.h"
-
+#include "gc/GC-inl.h"
 #include "gc/Marking-inl.h"
 #include "vm/JSAtom-inl.h"
 #include "vm/JSFunction-inl.h"
 #include "vm/JSObject-inl.h"
 #include "vm/JSScript-inl.h"
 #include "vm/NativeObject-inl.h"
 #include "vm/UnboxedObject-inl.h"
 
--- a/js/src/vm/JSCompartment.h
+++ b/js/src/vm/JSCompartment.h
@@ -1377,18 +1377,19 @@ class ErrorCopier
  * This class stores the data for AutoWrapperVector and AutoWrapperRooter. It
  * should not be used in any other situations.
  */
 struct WrapperValue
 {
     /*
      * We use unsafeGet() in the constructors to avoid invoking a read barrier
      * on the wrapper, which may be dead (see the comment about bug 803376 in
-     * jsgc.cpp regarding this). If there is an incremental GC while the wrapper
-     * is in use, the AutoWrapper rooter will ensure the wrapper gets marked.
+     * gc/GC.cpp regarding this). If there is an incremental GC while the
+     * wrapper is in use, the AutoWrapper rooter will ensure the wrapper gets
+     * marked.
      */
     explicit WrapperValue(const WrapperMap::Ptr& ptr)
       : value(*ptr->value().unsafeGet())
     {}
 
     explicit WrapperValue(const WrapperMap::Enum& e)
       : value(*e.front().value().unsafeGet())
     {}
--- a/js/src/vm/JSScript.h
+++ b/js/src/vm/JSScript.h
@@ -229,20 +229,20 @@ class ScriptCounts
     // instruction throw.
     PCCountsVector throwCounts_;
 
     // Information about any Ion compilations for the script.
     jit::IonScriptCounts* ionCounts_;
 };
 
 // Note: The key of this hash map is a weak reference to a JSScript.  We do not
-// use the WeakMap implementation provided in jsweakmap.h because it would be
+// use the WeakMap implementation provided in gc/WeakMap.h because it would be
 // collected at the beginning of the sweeping of the compartment, thus before
-// the calls to the JSScript::finalize function which are used to aggregate code
-// coverage results on the compartment.
+// the calls to the JSScript::finalize function which are used to aggregate
+// code coverage results on the compartment.
 typedef HashMap<JSScript*,
                 ScriptCounts*,
                 DefaultHasher<JSScript*>,
                 SystemAllocPolicy> ScriptCountsMap;
 typedef HashMap<JSScript*,
                 const char*,
                 DefaultHasher<JSScript*>,
                 SystemAllocPolicy> ScriptNameMap;
--- a/js/src/vm/MemoryMetrics.cpp
+++ b/js/src/vm/MemoryMetrics.cpp
@@ -3,18 +3,17 @@
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "js/MemoryMetrics.h"
 
 #include "mozilla/DebugOnly.h"
 
-#include "jsgc.h"
-
+#include "gc/GC.h"
 #include "gc/Heap.h"
 #include "gc/Nursery.h"
 #include "gc/PublicIterators.h"
 #include "jit/BaselineJIT.h"
 #include "jit/Ion.h"
 #include "vm/ArrayObject.h"
 #include "vm/JSCompartment.h"
 #include "vm/JSObject.h"
--- a/js/src/vm/ObjectGroup.cpp
+++ b/js/src/vm/ObjectGroup.cpp
@@ -2,20 +2,20 @@
  * vim: set ts=8 sts=4 et sw=4 tw=99:
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "vm/ObjectGroup.h"
 
 #include "jsexn.h"
-#include "jshashutil.h"
 
 #include "builtin/DataViewObject.h"
 #include "gc/FreeOp.h"
+#include "gc/HashUtil.h"
 #include "gc/Policy.h"
 #include "gc/StoreBuffer.h"
 #include "gc/Zone.h"
 #include "js/CharacterEncoding.h"
 #include "vm/ArrayObject.h"
 #include "vm/JSObject.h"
 #include "vm/RegExpObject.h"
 #include "vm/Shape.h"
--- a/js/src/vm/RegExpObject.cpp
+++ b/js/src/vm/RegExpObject.cpp
@@ -4,24 +4,24 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "vm/RegExpObject.h"
 
 #include "mozilla/MemoryReporting.h"
 #include "mozilla/PodOperations.h"
 
-#include "jshashutil.h"
 #include "jsstr.h"
 #ifdef DEBUG
 #include "jsutil.h"
 #endif
 
 #include "builtin/RegExp.h"
 #include "frontend/TokenStream.h"
+#include "gc/HashUtil.h"
 #ifdef DEBUG
 #include "irregexp/RegExpBytecode.h"
 #endif
 #include "irregexp/RegExpParser.h"
 #include "vm/MatchPairs.h"
 #include "vm/RegExpStatics.h"
 #include "vm/StringBuffer.h"
 #include "vm/TraceLogging.h"
--- a/js/src/vm/Runtime.cpp
+++ b/js/src/vm/Runtime.cpp
@@ -43,18 +43,17 @@
 #include "vm/Debugger.h"
 #include "vm/JSAtom.h"
 #include "vm/JSObject.h"
 #include "vm/JSScript.h"
 #include "vm/TraceLogging.h"
 #include "vm/TraceLoggingGraph.h"
 #include "wasm/WasmSignalHandlers.h"
 
-#include "jsgcinlines.h"
-
+#include "gc/GC-inl.h"
 #include "vm/JSContext-inl.h"
 
 using namespace js;
 using namespace js::gc;
 
 using mozilla::Atomic;
 using mozilla::DebugOnly;
 using mozilla::NegativeInfinity;
--- a/js/src/vm/Runtime.h
+++ b/js/src/vm/Runtime.h
@@ -680,17 +680,17 @@ struct JSRuntime : public js::MallocProv
     bool setDefaultLocale(const char* locale);
 
     /* Reset the default locale to OS defaults. */
     void resetDefaultLocale();
 
     /* Gets current default locale. String remains owned by context. */
     const char* getDefaultLocale();
 
-    /* Garbage collector state, used by jsgc.c. */
+    /* Garbage collector state. */
     js::gc::GCRuntime   gc;
 
     /* Garbage collector state has been successfully initialized. */
     js::WriteOnceData<bool> gcInitialized;
 
     bool hasZealMode(js::gc::ZealMode mode) { return gc.hasZealMode(mode); }
 
     void lockGC() {
--- a/js/src/vm/SavedStacks.cpp
+++ b/js/src/vm/SavedStacks.cpp
@@ -11,21 +11,21 @@
 #include "mozilla/DebugOnly.h"
 #include "mozilla/Move.h"
 
 #include <algorithm>
 #include <math.h>
 
 #include "jsapi.h"
 #include "jsfriendapi.h"
-#include "jshashutil.h"
 #include "jsmath.h"
 #include "jsnum.h"
 
 #include "gc/FreeOp.h"
+#include "gc/HashUtil.h"
 #include "gc/Marking.h"
 #include "gc/Policy.h"
 #include "gc/Rooting.h"
 #include "js/CharacterEncoding.h"
 #include "js/Vector.h"
 #include "vm/Debugger.h"
 #include "vm/GeckoProfiler.h"
 #include "vm/JSCompartment.h"
--- a/js/src/vm/SelfHosting.cpp
+++ b/js/src/vm/SelfHosting.cpp
@@ -9,17 +9,16 @@
 #include "mozilla/ArrayUtils.h"
 #include "mozilla/Casting.h"
 #include "mozilla/DebugOnly.h"
 #include "mozilla/Maybe.h"
 
 #include "jsarray.h"
 #include "jsdate.h"
 #include "jsfriendapi.h"
-#include "jshashutil.h"
 #include "jsiter.h"
 #include "jsstr.h"
 #include "jswrapper.h"
 #include "selfhosted.out.h"
 
 #include "builtin/intl/Collator.h"
 #include "builtin/intl/DateTimeFormat.h"
 #include "builtin/intl/IntlObject.h"
@@ -32,16 +31,17 @@
 #include "builtin/Promise.h"
 #include "builtin/Reflect.h"
 #include "builtin/RegExp.h"
 #include "builtin/SelfHostingDefines.h"
 #include "builtin/SIMD.h"
 #include "builtin/Stream.h"
 #include "builtin/TypedObject.h"
 #include "builtin/WeakMapObject.h"
+#include "gc/HashUtil.h"
 #include "gc/Marking.h"
 #include "gc/Policy.h"
 #include "jit/AtomicOperations.h"
 #include "jit/InlinableNatives.h"
 #include "js/CharacterEncoding.h"
 #include "js/Date.h"
 #include "vm/Compression.h"
 #include "vm/GeneratorObject.h"
--- a/js/src/vm/Shape.cpp
+++ b/js/src/vm/Shape.cpp
@@ -7,19 +7,18 @@
 /* JS symbol tables. */
 
 #include "vm/Shape-inl.h"
 
 #include "mozilla/DebugOnly.h"
 #include "mozilla/MathAlgorithms.h"
 #include "mozilla/PodOperations.h"
 
-#include "jshashutil.h"
-
 #include "gc/FreeOp.h"
+#include "gc/HashUtil.h"
 #include "gc/Policy.h"
 #include "gc/PublicIterators.h"
 #include "js/HashTable.h"
 #include "vm/JSAtom.h"
 #include "vm/JSContext.h"
 #include "vm/JSObject.h"
 
 #include "vm/Caches-inl.h"
--- a/js/src/vm/TypeInference-inl.h
+++ b/js/src/vm/TypeInference-inl.h
@@ -10,19 +10,18 @@
 #define vm_TypeInference_inl_h
 
 #include "vm/TypeInference.h"
 
 #include "mozilla/BinarySearch.h"
 #include "mozilla/Casting.h"
 #include "mozilla/PodOperations.h"
 
-#include "jsgc.h"
-
 #include "builtin/SymbolObject.h"
+#include "gc/GC.h"
 #include "jit/BaselineJIT.h"
 #include "vm/ArrayObject.h"
 #include "vm/BooleanObject.h"
 #include "vm/NumberObject.h"
 #include "vm/SharedArrayObject.h"
 #include "vm/StringObject.h"
 #include "vm/TypedArrayObject.h"
 #include "vm/UnboxedObject.h"
--- a/js/src/vm/TypeInference.cpp
+++ b/js/src/vm/TypeInference.cpp
@@ -8,20 +8,20 @@
 
 #include "mozilla/DebugOnly.h"
 #include "mozilla/IntegerPrintfMacros.h"
 #include "mozilla/MemoryReporting.h"
 #include "mozilla/PodOperations.h"
 #include "mozilla/Sprintf.h"
 
 #include "jsapi.h"
-#include "jshashutil.h"
 #include "jsprf.h"
 #include "jsstr.h"
 
+#include "gc/HashUtil.h"
 #include "jit/BaselineJIT.h"
 #include "jit/CompileInfo.h"
 #include "jit/Ion.h"
 #include "jit/IonAnalysis.h"
 #include "jit/JitCompartment.h"
 #include "jit/OptimizationTracking.h"
 #include "js/MemoryMetrics.h"
 #include "vm/HelperThreads.h"