[JSC] Move JSCell::subspaceFor to JSObject::subspaceFor, removing destructibleCellSpace
authorysuzuki@apple.com <ysuzuki@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 16 Dec 2019 22:45:33 +0000 (22:45 +0000)
committerysuzuki@apple.com <ysuzuki@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 16 Dec 2019 22:45:33 +0000 (22:45 +0000)
https://bugs.webkit.org/show_bug.cgi?id=205300

Reviewed by Mark Lam.

All non-JSObject JSCells have their own IsoSubspace / CompleteSubspace. We remove JSCell::subspaceFor function,
and move it to JSObject::subspaceFor. And we remove destructibleCellSpace since nobody uses it.

* runtime/JSCell.h:
* runtime/JSCellInlines.h:
(JSC::JSCell::subspaceFor): Deleted.
* runtime/JSObject.h:
* runtime/JSObjectInlines.h:
(JSC::JSObject::subspaceFor):
* runtime/VM.cpp:
(JSC::VM::VM):
* runtime/VM.h:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@253585 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/JSCell.h
Source/JavaScriptCore/runtime/JSCellInlines.h
Source/JavaScriptCore/runtime/JSObject.h
Source/JavaScriptCore/runtime/JSObjectInlines.h
Source/JavaScriptCore/runtime/VM.cpp
Source/JavaScriptCore/runtime/VM.h

index adb501c..61a01a0 100644 (file)
@@ -1,3 +1,23 @@
+2019-12-16  Yusuke Suzuki  <ysuzuki@apple.com>
+
+        [JSC] Move JSCell::subspaceFor to JSObject::subspaceFor, removing destructibleCellSpace
+        https://bugs.webkit.org/show_bug.cgi?id=205300
+
+        Reviewed by Mark Lam.
+
+        All non-JSObject JSCells have their own IsoSubspace / CompleteSubspace. We remove JSCell::subspaceFor function,
+        and move it to JSObject::subspaceFor. And we remove destructibleCellSpace since nobody uses it.
+
+        * runtime/JSCell.h:
+        * runtime/JSCellInlines.h:
+        (JSC::JSCell::subspaceFor): Deleted.
+        * runtime/JSObject.h:
+        * runtime/JSObjectInlines.h:
+        (JSC::JSObject::subspaceFor):
+        * runtime/VM.cpp:
+        (JSC::VM::VM):
+        * runtime/VM.h:
+
 2019-12-16  Mark Lam  <mark.lam@apple.com>
 
         Changed jsc shell timeout mechanism to leverage the VMTraps and use CPUTime.
index 047de07..665d088 100644 (file)
@@ -86,11 +86,6 @@ public:
 
     static constexpr bool needsDestruction = false;
 
-    // Don't call this directly. Call JSC::subspaceFor<Type>(vm) instead.
-    // FIXME: Refer to Subspace by reference.
-    // https://bugs.webkit.org/show_bug.cgi?id=166988
-    template<typename CellType, SubspaceAccess>
-    static CompleteSubspace* subspaceFor(VM&);
     static constexpr uint8_t numberOfLowerTierCells = 8;
 
     static JSCell* seenMultipleCalleeObjects() { return bitwise_cast<JSCell*>(static_cast<uintptr_t>(1)); }
index e98ce88..f6a32b2 100644 (file)
@@ -146,14 +146,6 @@ ALWAYS_INLINE VM& CallFrame::deprecatedVM() const
     return callee->vm();
 }
 
-template<typename CellType, SubspaceAccess>
-CompleteSubspace* JSCell::subspaceFor(VM& vm)
-{
-    if (CellType::needsDestruction)
-        return &vm.destructibleCellSpace;
-    return &vm.cellSpace;
-}
-
 template<typename Type>
 inline Allocator allocatorForNonVirtualConcurrently(VM& vm, size_t allocationSize, AllocatorForMode mode)
 {
index 143ea25..b7db454 100644 (file)
@@ -103,7 +103,13 @@ class JSObject : public JSCell {
     };
 
 public:
-    typedef JSCell Base;
+    using Base = JSCell;
+
+    // Don't call this directly. Call JSC::subspaceFor<Type>(vm) instead.
+    // FIXME: Refer to Subspace by reference.
+    // https://bugs.webkit.org/show_bug.cgi?id=166988
+    template<typename CellType, SubspaceAccess>
+    static CompleteSubspace* subspaceFor(VM&);
 
     // This is a super dangerous method for JITs. Sometimes the JITs will want to create either a
     // JSFinalObject or a JSArray. This is the method that will do that.
index 6027f19..07f6064 100644 (file)
 
 namespace JSC {
 
+template<typename CellType, SubspaceAccess>
+CompleteSubspace* JSObject::subspaceFor(VM& vm)
+{
+    static_assert(!CellType::needsDestruction);
+    return &vm.cellSpace;
+}
+
 // Section 7.3.17 of the spec.
 template <typename AddFunction> // Add function should have a type like: (JSValue, RuntimeType) -> bool
 void createListFromArrayLike(JSGlobalObject* globalObject, JSValue arrayLikeValue, RuntimeTypeMask legalTypesFilter, const String& notAnObjectErroMessage, const String& illegalTypeErrorMessage, AddFunction addFunction)
index 198c0e5..112409c 100644 (file)
@@ -348,7 +348,6 @@ VM::VM(VMType vmType, HeapType heapType)
     , immutableButterflyJSValueGigacageAuxiliarySpace("ImmutableButterfly Gigacage JSCellWithInteriorPointers", heap, immutableButterflyHeapCellType.get(), jsValueGigacageAllocator.get()) // Hash:0x7a945300
     , cellSpace("JSCell", heap, cellHeapCellType.get(), fastMallocAllocator.get()) // Hash:0xadfb5a79
     , variableSizedCellSpace("Variable Sized JSCell", heap, cellHeapCellType.get(), fastMallocAllocator.get()) // Hash:0xbcd769cc
-    , destructibleCellSpace("Destructible JSCell", heap, destructibleCellHeapCellType.get(), fastMallocAllocator.get()) // Hash:0xbfff3d73
     , destructibleObjectSpace("JSDestructibleObject", heap, destructibleObjectHeapCellType.get(), fastMallocAllocator.get()) // Hash:0x4f5ed7a9
     , bigIntSpace ISO_SUBSPACE_INIT(heap, destructibleCellHeapCellType.get(), JSBigInt)
     , calleeSpace ISO_SUBSPACE_INIT(heap, cellHeapCellType.get(), JSCallee)
index bd0b3b6..7901df6 100644 (file)
@@ -435,7 +435,6 @@ public:
     // Whenever possible, use subspaceFor<CellType>(vm) to get one of these subspaces.
     CompleteSubspace cellSpace;
     CompleteSubspace variableSizedCellSpace; // FIXME: This space is problematic because we have things in here like DirectArguments and ScopedArguments; those should be split into JSValueOOB cells and JSValueStrict auxiliaries. https://bugs.webkit.org/show_bug.cgi?id=182858
-    CompleteSubspace destructibleCellSpace;
     CompleteSubspace destructibleObjectSpace;
     
     IsoSubspace bigIntSpace;