Changeset 287006 in webkit
- Timestamp:
- Dec 13, 2021, 7:28:00 PM (5 years ago)
- Location:
- branches/safari-613.1.11-branch/Source/JavaScriptCore
- Files:
-
- 38 edited
-
ChangeLog (modified) (1 diff)
-
bytecode/AccessCase.cpp (modified) (6 diffs)
-
bytecode/AccessCase.h (modified) (6 diffs)
-
bytecode/CheckPrivateBrandStatus.cpp (modified) (1 diff)
-
bytecode/DeleteByStatus.cpp (modified) (1 diff)
-
bytecode/GetByStatus.cpp (modified) (1 diff)
-
bytecode/InByStatus.cpp (modified) (1 diff)
-
bytecode/InlineAccess.cpp (modified) (2 diffs)
-
bytecode/InstanceOfStatus.cpp (modified) (1 diff)
-
bytecode/InternalFunctionAllocationProfile.h (modified) (2 diffs)
-
bytecode/PutByStatus.cpp (modified) (1 diff)
-
bytecode/SetPrivateBrandStatus.cpp (modified) (1 diff)
-
bytecode/StructureStubInfo.cpp (modified) (15 diffs)
-
bytecode/StructureStubInfo.h (modified) (4 diffs)
-
dfg/DFGSpeculativeJIT.cpp (modified) (2 diffs)
-
ftl/FTLAbstractHeapRepository.h (modified) (1 diff)
-
ftl/FTLLowerDFGToB3.cpp (modified) (3 diffs)
-
heap/AbstractSlotVisitor.h (modified) (2 diffs)
-
heap/AbstractSlotVisitorInlines.h (modified) (1 diff)
-
heap/SlotVisitor.h (modified) (1 diff)
-
heap/SlotVisitorInlines.h (modified) (1 diff)
-
jit/AssemblyHelpers.cpp (modified) (2 diffs)
-
jit/AssemblyHelpers.h (modified) (1 diff)
-
jit/JITInlineCacheGenerator.cpp (modified) (3 diffs)
-
runtime/FunctionExecutable.cpp (modified) (1 diff)
-
runtime/FunctionExecutable.h (modified) (2 diffs)
-
runtime/FunctionRareData.cpp (modified) (1 diff)
-
runtime/FunctionRareData.h (modified) (3 diffs)
-
runtime/JSGlobalObject.cpp (modified) (1 diff)
-
runtime/JSGlobalObject.h (modified) (7 diffs)
-
runtime/JSPropertyNameEnumerator.cpp (modified) (2 diffs)
-
runtime/JSPropertyNameEnumerator.h (modified) (2 diffs)
-
runtime/StructureRareData.cpp (modified) (1 diff)
-
runtime/StructureRareData.h (modified) (2 diffs)
-
runtime/WriteBarrier.h (modified) (2 diffs)
-
runtime/WriteBarrierInlines.h (modified) (1 diff)
-
tools/JSDollarVM.cpp (modified) (2 diffs)
-
tools/JSDollarVM.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-613.1.11-branch/Source/JavaScriptCore/ChangeLog
r287005 r287006 1 2021-12-13 Russell Epstein <repstein@apple.com> 2 3 Cherry-pick r286667. rdar://problem/86445989 4 5 [JSC] Introduce WriteBarrierStructureID 6 https://bugs.webkit.org/show_bug.cgi?id=233918 7 8 Reviewed by Mark Lam. 9 10 This patch adds WriteBarrierStructureID class, which is similar to WriteBarrier<Structure>, but internally, 11 it holds StructureID, so sizeof(WriteBarrierStructureID) is 4. This class is useful to use StructureID for 12 memory saving while keeping WriteBarrier<Structure>'s useful features (automatically inserts write-barrier when 13 setting etc.). This also paves the way to introducing DOMStructures array with WriteBarrierStructureID instead 14 of costly HashMap<ClassInfo*, WriteBarrier<Structure>>. 15 16 * bytecode/AccessCase.cpp: 17 (JSC::AccessCase::AccessCase): 18 (JSC::AccessCase::forEachDependentCell const): 19 (JSC::AccessCase::dump const): 20 (JSC::AccessCase::propagateTransitions const): 21 (JSC::AccessCase::canBeShared): 22 * bytecode/AccessCase.h: 23 (JSC::AccessCase::structure const): 24 (JSC::AccessCase::newStructure const): 25 (JSC::AccessCase::hash const): 26 (JSC::AccessCase::AccessCase): 27 * bytecode/CheckPrivateBrandStatus.cpp: 28 (JSC::CheckPrivateBrandStatus::computeForStubInfoWithoutExitSiteFeedback): 29 * bytecode/DeleteByStatus.cpp: 30 (JSC::DeleteByStatus::computeForStubInfoWithoutExitSiteFeedback): 31 * bytecode/GetByStatus.cpp: 32 (JSC::GetByStatus::computeForStubInfoWithoutExitSiteFeedback): 33 * bytecode/InByStatus.cpp: 34 (JSC::InByStatus::computeForStubInfoWithoutExitSiteFeedback): 35 * bytecode/InlineAccess.cpp: 36 (JSC::InlineAccess::rewireStubAsJumpInAccess): 37 (JSC::InlineAccess::resetStubAsJumpInAccess): 38 * bytecode/InstanceOfStatus.cpp: 39 (JSC::InstanceOfStatus::computeForStubInfo): 40 * bytecode/InternalFunctionAllocationProfile.h: 41 (JSC::InternalFunctionAllocationProfile::offsetOfStructureID): 42 (JSC::InternalFunctionAllocationProfile::structure): 43 (JSC::InternalFunctionAllocationProfile::clear): 44 (JSC::InternalFunctionAllocationProfile::visitAggregate): 45 (JSC::InternalFunctionAllocationProfile::createAllocationStructureFromBase): 46 (JSC::InternalFunctionAllocationProfile::offsetOfStructure): Deleted. 47 * bytecode/PutByStatus.cpp: 48 (JSC::PutByStatus::computeForStubInfo): 49 * bytecode/SetPrivateBrandStatus.cpp: 50 (JSC::SetPrivateBrandStatus::computeForStubInfoWithoutExitSiteFeedback): 51 * bytecode/StructureStubInfo.cpp: 52 (JSC::StructureStubInfo::initGetByIdSelf): 53 (JSC::StructureStubInfo::initPutByIdReplace): 54 (JSC::StructureStubInfo::initInByIdSelf): 55 (JSC::StructureStubInfo::deref): 56 (JSC::StructureStubInfo::aboutToDie): 57 (JSC::StructureStubInfo::addAccessCase): 58 (JSC::StructureStubInfo::reset): 59 (JSC::StructureStubInfo::visitAggregateImpl): 60 (JSC::StructureStubInfo::visitWeakReferences): 61 (JSC::StructureStubInfo::propagateTransitions): 62 (JSC::StructureStubInfo::summary const): 63 (JSC::StructureStubInfo::containsPC const): 64 * bytecode/StructureStubInfo.h: 65 (JSC::StructureStubInfo::inlineAccessBaseStructure): 66 (JSC::StructureStubInfo::offsetOfByIdSelfOffset): 67 (JSC::StructureStubInfo::offsetOfInlineAccessBaseStructureID): 68 (JSC::StructureStubInfo::offsetOfInlineAccessBaseStructure): Deleted. 69 * dfg/DFGSpeculativeJIT.cpp: 70 * ftl/FTLAbstractHeapRepository.h: 71 * ftl/FTLLowerDFGToB3.cpp: 72 (JSC::FTL::DFG::LowerDFGToB3::compileCreatePromise): 73 (JSC::FTL::DFG::LowerDFGToB3::compileCreateInternalFieldObject): 74 (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq): 75 * heap/AbstractSlotVisitor.h: 76 * heap/AbstractSlotVisitorInlines.h: 77 (JSC::AbstractSlotVisitor::append): 78 (JSC::AbstractSlotVisitor::appendHidden): 79 * heap/SlotVisitor.h: 80 * heap/SlotVisitorInlines.h: 81 (JSC::SlotVisitor::append): 82 (JSC::SlotVisitor::appendHidden): 83 * jit/AssemblyHelpers.cpp: 84 (JSC::AssemblyHelpers::emitNonNullDecodeStructureID): 85 (JSC::AssemblyHelpers::emitLoadStructure): 86 * jit/AssemblyHelpers.h: 87 * jit/JITInlineCacheGenerator.cpp: 88 (JSC::generateGetByIdInlineAccess): 89 (JSC::JITPutByIdGenerator::generateBaselineDataICFastPath): 90 (JSC::JITInByIdGenerator::generateBaselineDataICFastPath): 91 * runtime/FunctionExecutable.cpp: 92 (JSC::FunctionExecutable::visitChildrenImpl): 93 * runtime/FunctionExecutable.h: 94 * runtime/FunctionRareData.cpp: 95 (JSC::FunctionRareData::visitChildrenImpl): 96 * runtime/FunctionRareData.h: 97 * runtime/JSGlobalObject.cpp: 98 (JSC::JSGlobalObject::visitChildrenImpl): 99 * runtime/JSGlobalObject.h: 100 * runtime/JSPropertyNameEnumerator.cpp: 101 (JSC::JSPropertyNameEnumerator::JSPropertyNameEnumerator): 102 (JSC::JSPropertyNameEnumerator::visitChildrenImpl): 103 * runtime/JSPropertyNameEnumerator.h: 104 * runtime/StructureRareData.cpp: 105 (JSC::StructureRareData::StructureRareData): 106 * runtime/StructureRareData.h: 107 * runtime/WriteBarrier.h: 108 (JSC::WriteBarrierStructureID::WriteBarrierStructureID): 109 (JSC::WriteBarrierStructureID::get const): 110 (JSC::WriteBarrierStructureID::operator* const): 111 (JSC::WriteBarrierStructureID::operator-> const): 112 (JSC::WriteBarrierStructureID::clear): 113 (JSC::WriteBarrierStructureID::operator bool const): 114 (JSC::WriteBarrierStructureID::operator! const): 115 (JSC::WriteBarrierStructureID::setWithoutWriteBarrier): 116 (JSC::WriteBarrierStructureID::unvalidatedGet const): 117 (JSC::WriteBarrierStructureID::value const): 118 * runtime/WriteBarrierInlines.h: 119 (JSC::WriteBarrierStructureID::set): 120 (JSC::WriteBarrierStructureID::setMayBeNull): 121 (JSC::WriteBarrierStructureID::setEarlyValue): 122 * tools/JSDollarVM.cpp: 123 (JSC::JSDollarVM::finishCreation): 124 (JSC::JSDollarVM::visitChildrenImpl): 125 * tools/JSDollarVM.h: 126 127 git-svn-id: https://svn.webkit.org/repository/webkit/trunk@286667 268f45cc-cd09-0410-ab3c-d52691b4dbfc 128 129 2021-12-08 Yusuke Suzuki <ysuzuki@apple.com> 130 131 [JSC] Introduce WriteBarrierStructureID 132 https://bugs.webkit.org/show_bug.cgi?id=233918 133 134 Reviewed by Mark Lam. 135 136 This patch adds WriteBarrierStructureID class, which is similar to WriteBarrier<Structure>, but internally, 137 it holds StructureID, so sizeof(WriteBarrierStructureID) is 4. This class is useful to use StructureID for 138 memory saving while keeping WriteBarrier<Structure>'s useful features (automatically inserts write-barrier when 139 setting etc.). This also paves the way to introducing DOMStructures array with WriteBarrierStructureID instead 140 of costly HashMap<ClassInfo*, WriteBarrier<Structure>>. 141 142 * bytecode/AccessCase.cpp: 143 (JSC::AccessCase::AccessCase): 144 (JSC::AccessCase::forEachDependentCell const): 145 (JSC::AccessCase::dump const): 146 (JSC::AccessCase::propagateTransitions const): 147 (JSC::AccessCase::canBeShared): 148 * bytecode/AccessCase.h: 149 (JSC::AccessCase::structure const): 150 (JSC::AccessCase::newStructure const): 151 (JSC::AccessCase::hash const): 152 (JSC::AccessCase::AccessCase): 153 * bytecode/CheckPrivateBrandStatus.cpp: 154 (JSC::CheckPrivateBrandStatus::computeForStubInfoWithoutExitSiteFeedback): 155 * bytecode/DeleteByStatus.cpp: 156 (JSC::DeleteByStatus::computeForStubInfoWithoutExitSiteFeedback): 157 * bytecode/GetByStatus.cpp: 158 (JSC::GetByStatus::computeForStubInfoWithoutExitSiteFeedback): 159 * bytecode/InByStatus.cpp: 160 (JSC::InByStatus::computeForStubInfoWithoutExitSiteFeedback): 161 * bytecode/InlineAccess.cpp: 162 (JSC::InlineAccess::rewireStubAsJumpInAccess): 163 (JSC::InlineAccess::resetStubAsJumpInAccess): 164 * bytecode/InstanceOfStatus.cpp: 165 (JSC::InstanceOfStatus::computeForStubInfo): 166 * bytecode/InternalFunctionAllocationProfile.h: 167 (JSC::InternalFunctionAllocationProfile::offsetOfStructureID): 168 (JSC::InternalFunctionAllocationProfile::structure): 169 (JSC::InternalFunctionAllocationProfile::clear): 170 (JSC::InternalFunctionAllocationProfile::visitAggregate): 171 (JSC::InternalFunctionAllocationProfile::createAllocationStructureFromBase): 172 (JSC::InternalFunctionAllocationProfile::offsetOfStructure): Deleted. 173 * bytecode/PutByStatus.cpp: 174 (JSC::PutByStatus::computeForStubInfo): 175 * bytecode/SetPrivateBrandStatus.cpp: 176 (JSC::SetPrivateBrandStatus::computeForStubInfoWithoutExitSiteFeedback): 177 * bytecode/StructureStubInfo.cpp: 178 (JSC::StructureStubInfo::initGetByIdSelf): 179 (JSC::StructureStubInfo::initPutByIdReplace): 180 (JSC::StructureStubInfo::initInByIdSelf): 181 (JSC::StructureStubInfo::deref): 182 (JSC::StructureStubInfo::aboutToDie): 183 (JSC::StructureStubInfo::addAccessCase): 184 (JSC::StructureStubInfo::reset): 185 (JSC::StructureStubInfo::visitAggregateImpl): 186 (JSC::StructureStubInfo::visitWeakReferences): 187 (JSC::StructureStubInfo::propagateTransitions): 188 (JSC::StructureStubInfo::summary const): 189 (JSC::StructureStubInfo::containsPC const): 190 * bytecode/StructureStubInfo.h: 191 (JSC::StructureStubInfo::inlineAccessBaseStructure): 192 (JSC::StructureStubInfo::offsetOfByIdSelfOffset): 193 (JSC::StructureStubInfo::offsetOfInlineAccessBaseStructureID): 194 (JSC::StructureStubInfo::offsetOfInlineAccessBaseStructure): Deleted. 195 * dfg/DFGSpeculativeJIT.cpp: 196 * ftl/FTLAbstractHeapRepository.h: 197 * ftl/FTLLowerDFGToB3.cpp: 198 (JSC::FTL::DFG::LowerDFGToB3::compileCreatePromise): 199 (JSC::FTL::DFG::LowerDFGToB3::compileCreateInternalFieldObject): 200 (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq): 201 * heap/AbstractSlotVisitor.h: 202 * heap/AbstractSlotVisitorInlines.h: 203 (JSC::AbstractSlotVisitor::append): 204 (JSC::AbstractSlotVisitor::appendHidden): 205 * heap/SlotVisitor.h: 206 * heap/SlotVisitorInlines.h: 207 (JSC::SlotVisitor::append): 208 (JSC::SlotVisitor::appendHidden): 209 * jit/AssemblyHelpers.cpp: 210 (JSC::AssemblyHelpers::emitNonNullDecodeStructureID): 211 (JSC::AssemblyHelpers::emitLoadStructure): 212 * jit/AssemblyHelpers.h: 213 * jit/JITInlineCacheGenerator.cpp: 214 (JSC::generateGetByIdInlineAccess): 215 (JSC::JITPutByIdGenerator::generateBaselineDataICFastPath): 216 (JSC::JITInByIdGenerator::generateBaselineDataICFastPath): 217 * runtime/FunctionExecutable.cpp: 218 (JSC::FunctionExecutable::visitChildrenImpl): 219 * runtime/FunctionExecutable.h: 220 * runtime/FunctionRareData.cpp: 221 (JSC::FunctionRareData::visitChildrenImpl): 222 * runtime/FunctionRareData.h: 223 * runtime/JSGlobalObject.cpp: 224 (JSC::JSGlobalObject::visitChildrenImpl): 225 * runtime/JSGlobalObject.h: 226 * runtime/JSPropertyNameEnumerator.cpp: 227 (JSC::JSPropertyNameEnumerator::JSPropertyNameEnumerator): 228 (JSC::JSPropertyNameEnumerator::visitChildrenImpl): 229 * runtime/JSPropertyNameEnumerator.h: 230 * runtime/StructureRareData.cpp: 231 (JSC::StructureRareData::StructureRareData): 232 * runtime/StructureRareData.h: 233 * runtime/WriteBarrier.h: 234 (JSC::WriteBarrierStructureID::WriteBarrierStructureID): 235 (JSC::WriteBarrierStructureID::get const): 236 (JSC::WriteBarrierStructureID::operator* const): 237 (JSC::WriteBarrierStructureID::operator-> const): 238 (JSC::WriteBarrierStructureID::clear): 239 (JSC::WriteBarrierStructureID::operator bool const): 240 (JSC::WriteBarrierStructureID::operator! const): 241 (JSC::WriteBarrierStructureID::setWithoutWriteBarrier): 242 (JSC::WriteBarrierStructureID::unvalidatedGet const): 243 (JSC::WriteBarrierStructureID::value const): 244 * runtime/WriteBarrierInlines.h: 245 (JSC::WriteBarrierStructureID::set): 246 (JSC::WriteBarrierStructureID::setMayBeNull): 247 (JSC::WriteBarrierStructureID::setEarlyValue): 248 * tools/JSDollarVM.cpp: 249 (JSC::JSDollarVM::finishCreation): 250 (JSC::JSDollarVM::visitChildrenImpl): 251 * tools/JSDollarVM.h: 252 1 253 2021-12-13 Russell Epstein <repstein@apple.com> 2 254 -
branches/safari-613.1.11-branch/Source/JavaScriptCore/bytecode/AccessCase.cpp
r286347 r287006 64 64 , m_identifier(identifier) 65 65 { 66 m_structure .setMayBeNull(vm, owner, structure);66 m_structureID.setMayBeNull(vm, owner, structure); 67 67 m_conditionSet = conditionSet; 68 68 RELEASE_ASSERT(m_conditionSet.isValid()); … … 540 540 { 541 541 m_conditionSet.forEachDependentCell(functor); 542 if (m_structure )543 functor(m_structure .get());542 if (m_structureID) 543 functor(m_structureID.get()); 544 544 if (m_polyProtoAccessChain) { 545 545 for (StructureID structureID : m_polyProtoAccessChain->chain()) … … 875 875 out.print("\n", indent, "from structure = ", pointerDump(structure()), 876 876 "\n", indent, "to structure = ", pointerDump(newStructure())); 877 else if (m_structure )878 out.print("\n", indent, "structure = ", pointerDump(m_structure .get()));877 else if (m_structureID) 878 out.print("\n", indent, "structure = ", pointerDump(m_structureID.get())); 879 879 } 880 880 … … 905 905 void AccessCase::propagateTransitions(Visitor& visitor) const 906 906 { 907 if (m_structure )908 m_structure ->markIfCheap(visitor);907 if (m_structureID) 908 m_structureID->markIfCheap(visitor); 909 909 910 910 if (m_polyProtoAccessChain) { … … 916 916 case Transition: 917 917 case Delete: 918 if (visitor.isMarked(m_structure ->previousID()))919 visitor.appendUnbarriered(m_structure .get());918 if (visitor.isMarked(m_structureID->previousID())) 919 visitor.appendUnbarriered(m_structureID.get()); 920 920 break; 921 921 default: … … 2614 2614 if (lhs.m_viaProxy != rhs.m_viaProxy) 2615 2615 return false; 2616 if (lhs.m_structure .get() != rhs.m_structure.get())2616 if (lhs.m_structureID.get() != rhs.m_structureID.get()) 2617 2617 return false; 2618 2618 if (lhs.m_identifier != rhs.m_identifier) -
branches/safari-613.1.11-branch/Source/JavaScriptCore/bytecode/AccessCase.h
r282664 r287006 185 185 { 186 186 if (m_type == Transition || m_type == Delete || m_type == SetPrivateBrand) 187 return m_structure ->previousID();188 return m_structure .get();187 return m_structureID->previousID(); 188 return m_structureID.get(); 189 189 } 190 190 bool guardedByStructureCheck(const StructureStubInfo&) const; … … 193 193 { 194 194 ASSERT(m_type == Transition || m_type == Delete || m_type == SetPrivateBrand); 195 return m_structure .get();195 return m_structureID.get(); 196 196 } 197 197 … … 273 273 unsigned hash() const 274 274 { 275 return computeHash(m_conditionSet.hash(), static_cast<unsigned>(m_type), m_viaProxy, m_structure .unvalidatedGet(), m_offset);275 return computeHash(m_conditionSet.hash(), static_cast<unsigned>(m_type), m_viaProxy, m_structureID.unvalidatedGet(), m_offset); 276 276 } 277 277 … … 285 285 , m_viaProxy(WTFMove(other.m_viaProxy)) 286 286 , m_offset(WTFMove(other.m_offset)) 287 , m_structure (WTFMove(other.m_structure))287 , m_structureID(WTFMove(other.m_structureID)) 288 288 , m_conditionSet(WTFMove(other.m_conditionSet)) 289 289 , m_polyProtoAccessChain(WTFMove(other.m_polyProtoAccessChain)) … … 296 296 , m_viaProxy(other.m_viaProxy) 297 297 , m_offset(other.m_offset) 298 , m_structure (other.m_structure)298 , m_structureID(other.m_structureID) 299 299 , m_conditionSet(other.m_conditionSet) 300 300 , m_polyProtoAccessChain(other.m_polyProtoAccessChain) … … 349 349 // structure for a transition and we rely on the fact that it has a strong reference to the old 350 350 // structure. For proxies, this is the structure of the object behind the proxy. 351 WriteBarrier <Structure> m_structure;351 WriteBarrierStructureID m_structureID; 352 352 353 353 ObjectPropertyConditionSet m_conditionSet; -
branches/safari-613.1.11-branch/Source/JavaScriptCore/bytecode/CheckPrivateBrandStatus.cpp
r278445 r287006 101 101 102 102 case CacheType::Stub: { 103 PolymorphicAccess* list = stubInfo-> u.stub;103 PolymorphicAccess* list = stubInfo->m_stub; 104 104 105 105 for (unsigned listIndex = 0; listIndex < list->size(); ++listIndex) { -
branches/safari-613.1.11-branch/Source/JavaScriptCore/bytecode/DeleteByStatus.cpp
r278696 r287006 100 100 101 101 case CacheType::Stub: { 102 PolymorphicAccess* list = stubInfo-> u.stub;102 PolymorphicAccess* list = stubInfo->m_stub; 103 103 104 104 for (unsigned listIndex = 0; listIndex < list->size(); ++listIndex) { -
branches/safari-613.1.11-branch/Source/JavaScriptCore/bytecode/GetByStatus.cpp
r286345 r287006 237 237 238 238 case CacheType::Stub: { 239 PolymorphicAccess* list = stubInfo-> u.stub;239 PolymorphicAccess* list = stubInfo->m_stub; 240 240 if (list->size() == 1) { 241 241 const AccessCase& access = list->at(0); -
branches/safari-613.1.11-branch/Source/JavaScriptCore/bytecode/InByStatus.cpp
r283139 r287006 161 161 162 162 case CacheType::Stub: { 163 PolymorphicAccess* list = stubInfo-> u.stub;163 PolymorphicAccess* list = stubInfo->m_stub; 164 164 for (unsigned listIndex = 0; listIndex < list->size(); ++listIndex) { 165 165 const AccessCase& access = list->at(listIndex); -
branches/safari-613.1.11-branch/Source/JavaScriptCore/bytecode/InlineAccess.cpp
r286345 r287006 448 448 449 449 stubInfo.m_codePtr = target; 450 stubInfo.m_inlineAccessBaseStructure = StructureID(); // Clear out the inline access code.450 stubInfo.m_inlineAccessBaseStructureID.clear(); // Clear out the inline access code. 451 451 return; 452 452 } … … 465 465 if (codeBlock->useDataIC() && codeBlock->jitType() == JITType::BaselineJIT) { 466 466 stubInfo.m_codePtr = stubInfo.slowPathStartLocation; 467 stubInfo.m_inlineAccessBaseStructure = StructureID(); // Clear out the inline access code.467 stubInfo.m_inlineAccessBaseStructureID.clear(); // Clear out the inline access code. 468 468 return; 469 469 } -
branches/safari-613.1.11-branch/Source/JavaScriptCore/bytecode/InstanceOfStatus.cpp
r275490 r287006 84 84 return TakesSlowPath; // This is conservative. It could be that we have no information. 85 85 86 PolymorphicAccess* list = stubInfo-> u.stub;86 PolymorphicAccess* list = stubInfo->m_stub; 87 87 InstanceOfStatus result; 88 88 for (unsigned listIndex = 0; listIndex < list->size(); ++listIndex) { -
branches/safari-613.1.11-branch/Source/JavaScriptCore/bytecode/InternalFunctionAllocationProfile.h
r284852 r287006 34 34 class InternalFunctionAllocationProfile { 35 35 public: 36 static inline ptrdiff_t offsetOfStructure () { return OBJECT_OFFSETOF(InternalFunctionAllocationProfile, m_structure); }36 static inline ptrdiff_t offsetOfStructureID() { return OBJECT_OFFSETOF(InternalFunctionAllocationProfile, m_structureID); } 37 37 38 Structure* structure() { return m_structure .get(); }38 Structure* structure() { return m_structureID.get(); } 39 39 Structure* createAllocationStructureFromBase(VM&, JSGlobalObject*, JSCell* owner, JSObject* prototype, Structure* base); 40 40 41 void clear() { m_structure .clear(); }42 template<typename Visitor> void visitAggregate(Visitor& visitor) { visitor.append(m_structure ); }41 void clear() { m_structureID.clear(); } 42 template<typename Visitor> void visitAggregate(Visitor& visitor) { visitor.append(m_structureID); } 43 43 44 44 private: 45 WriteBarrier <Structure> m_structure;45 WriteBarrierStructureID m_structureID; 46 46 }; 47 47 48 48 inline Structure* InternalFunctionAllocationProfile::createAllocationStructureFromBase(VM& vm, JSGlobalObject* baseGlobalObject, JSCell* owner, JSObject* prototype, Structure* baseStructure) 49 49 { 50 ASSERT(!m_structure || m_structure.get()->classInfo() != baseStructure->classInfo() || m_structure->globalObject() != baseStructure->globalObject());50 ASSERT(!m_structureID || m_structureID.get()->classInfo() != baseStructure->classInfo() || m_structureID->globalObject() != baseStructure->globalObject()); 51 51 ASSERT(baseStructure->hasMonoProto()); 52 52 … … 62 62 WTF::storeStoreFence(); 63 63 64 m_structure .set(vm, owner, structure);65 return m_structure.get();64 m_structureID.set(vm, owner, structure); 65 return structure; 66 66 } 67 67 -
branches/safari-613.1.11-branch/Source/JavaScriptCore/bytecode/PutByStatus.cpp
r286345 r287006 189 189 190 190 case CacheType::Stub: { 191 PolymorphicAccess* list = stubInfo-> u.stub;191 PolymorphicAccess* list = stubInfo->m_stub; 192 192 193 193 PutByStatus result; -
branches/safari-613.1.11-branch/Source/JavaScriptCore/bytecode/SetPrivateBrandStatus.cpp
r278445 r287006 101 101 102 102 case CacheType::Stub: { 103 PolymorphicAccess* list = stubInfo-> u.stub;103 PolymorphicAccess* list = stubInfo->m_stub; 104 104 105 105 for (unsigned listIndex = 0; listIndex < list->size(); ++listIndex) { -
branches/safari-613.1.11-branch/Source/JavaScriptCore/bytecode/StructureStubInfo.cpp
r286345 r287006 50 50 setCacheType(locker, CacheType::GetByIdSelf); 51 51 m_identifier = identifier; 52 m_inlineAccessBaseStructure = inlineAccessBaseStructure->id(); 53 codeBlock->vm().writeBarrier(codeBlock); 52 m_inlineAccessBaseStructureID.set(codeBlock->vm(), codeBlock, inlineAccessBaseStructure); 54 53 byIdSelfOffset = offset; 55 54 } … … 72 71 setCacheType(locker, CacheType::PutByIdReplace); 73 72 m_identifier = identifier; 74 m_inlineAccessBaseStructure = inlineAccessBaseStructure->id(); 75 codeBlock->vm().writeBarrier(codeBlock); 73 m_inlineAccessBaseStructureID.set(codeBlock->vm(), codeBlock, inlineAccessBaseStructure); 76 74 byIdSelfOffset = offset; 77 75 } … … 82 80 setCacheType(locker, CacheType::InByIdSelf); 83 81 m_identifier = identifier; 84 m_inlineAccessBaseStructure = inlineAccessBaseStructure->id(); 85 codeBlock->vm().writeBarrier(codeBlock); 82 m_inlineAccessBaseStructureID.set(codeBlock->vm(), codeBlock, inlineAccessBaseStructure); 86 83 byIdSelfOffset = offset; 87 84 } … … 91 88 switch (m_cacheType) { 92 89 case CacheType::Stub: 93 delete u.stub;90 delete m_stub; 94 91 return; 95 92 case CacheType::Unset: … … 109 106 switch (m_cacheType) { 110 107 case CacheType::Stub: 111 u.stub->aboutToDie();108 m_stub->aboutToDie(); 112 109 return; 113 110 case CacheType::Unset: … … 140 137 141 138 if (m_cacheType == CacheType::Stub) { 142 result = u.stub->addCase(locker, vm, codeBlock, *this, accessCase.releaseNonNull());139 result = m_stub->addCase(locker, vm, codeBlock, *this, accessCase.releaseNonNull()); 143 140 144 141 if (StructureStubInfoInternal::verbose) … … 177 174 178 175 setCacheType(locker, CacheType::Stub); 179 u.stub = access.release();176 m_stub = access.release(); 180 177 } 181 178 … … 203 200 clearBufferedStructures(); 204 201 205 result = u.stub->regenerate(locker, vm, globalObject, codeBlock, ecmaMode, *this);202 result = m_stub->regenerate(locker, vm, globalObject, codeBlock, ecmaMode, *this); 206 203 207 204 if (StructureStubInfoInternal::verbose) … … 217 214 // be buffered, and we have not yet generated any code. Once the Stub finally generates 218 215 // code, we're no longer running the inline access code, so we can then clear out 219 // m_inlineAccessBaseStructure . The reason we don't clear m_inlineAccessBaseStructurewhile220 // we're buffered is because we rely on it to reset during GC if m_inlineAccessBaseStructure 216 // m_inlineAccessBaseStructureID. The reason we don't clear m_inlineAccessBaseStructureID while 217 // we're buffered is because we rely on it to reset during GC if m_inlineAccessBaseStructureID 221 218 // is collected. 222 219 m_identifier = nullptr; 223 m_inlineAccessBaseStructure = StructureID();220 m_inlineAccessBaseStructureID.clear(); 224 221 225 222 // If we generated some code then we don't want to attempt to repatch in the future until we … … 236 233 clearBufferedStructures(); 237 234 m_identifier = nullptr; 238 m_inlineAccessBaseStructure = StructureID();235 m_inlineAccessBaseStructureID.clear(); 239 236 240 237 if (m_cacheType == CacheType::Unset) … … 324 321 return; 325 322 case CacheType::Stub: 326 u.stub->visitAggregate(visitor);323 m_stub->visitAggregate(visitor); 327 324 return; 328 325 } … … 349 346 isValid &= vm.heap.isMarked(structure); 350 347 if (m_cacheType == CacheType::Stub) 351 isValid &= u.stub->visitWeak(vm);348 isValid &= m_stub->visitWeak(vm); 352 349 353 350 if (isValid) … … 365 362 366 363 if (m_cacheType == CacheType::Stub) 367 u.stub->propagateTransitions(visitor);364 m_stub->propagateTransitions(visitor); 368 365 } 369 366 … … 376 373 StubInfoSummary simple = StubInfoSummary::Simple; 377 374 if (m_cacheType == CacheType::Stub) { 378 PolymorphicAccess* list = u.stub;375 PolymorphicAccess* list = m_stub; 379 376 for (unsigned i = 0; i < list->size(); ++i) { 380 377 const AccessCase& access = list->at(i); … … 408 405 if (m_cacheType != CacheType::Stub) 409 406 return false; 410 return u.stub->containsPC(pc);407 return m_stub->containsPC(pc); 411 408 } 412 409 -
branches/safari-613.1.11-branch/Source/JavaScriptCore/bytecode/StructureStubInfo.h
r286345 r287006 211 211 return considerCaching(vm, codeBlock, structure, impl); 212 212 } 213 214 Structure* inlineAccessBaseStructure(VM&) 215 { 216 return m_inlineAccessBaseStructureID.get(); 217 } 218 219 static ptrdiff_t offsetOfByIdSelfOffset() { return OBJECT_OFFSETOF(StructureStubInfo, byIdSelfOffset); } 220 static ptrdiff_t offsetOfInlineAccessBaseStructureID() { return OBJECT_OFFSETOF(StructureStubInfo, m_inlineAccessBaseStructureID); } 213 221 214 222 private: … … 352 360 public: 353 361 CodeOrigin codeOrigin; 362 PolymorphicAccess* m_stub { nullptr }; 354 363 PropertyOffset byIdSelfOffset; 355 static ptrdiff_t offsetOfByIdSelfOffset() { return OBJECT_OFFSETOF(StructureStubInfo, byIdSelfOffset); } 356 static ptrdiff_t offsetOfInlineAccessBaseStructure() { return OBJECT_OFFSETOF(StructureStubInfo, m_inlineAccessBaseStructure); } 357 union { 358 PolymorphicAccess* stub; 359 } u; 360 Structure* inlineAccessBaseStructure(VM&) 361 { 362 if (!m_inlineAccessBaseStructure) 363 return nullptr; 364 return m_inlineAccessBaseStructure.decode(); 365 } 366 StructureID m_inlineAccessBaseStructure; 364 WriteBarrierStructureID m_inlineAccessBaseStructureID; 365 367 366 private: 368 367 CacheableIdentifier m_identifier; … … 423 422 uint8_t repatchCount { 0 }; 424 423 uint8_t numberOfCoolDowns { 0 }; 425 424 uint8_t bufferingCountdown; 425 private: 426 Lock m_bufferedStructuresLock; 427 public: 426 428 CallSiteIndex callSiteIndex; 427 428 uint8_t bufferingCountdown;429 429 bool resetByGC : 1; 430 430 bool tookSlowPath : 1; … … 436 436 bool propertyIsInt32 : 1; 437 437 bool propertyIsSymbol : 1; 438 private:439 Lock m_bufferedStructuresLock;440 438 }; 441 439 -
branches/safari-613.1.11-branch/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
r286347 r287006 14820 14820 m_jit.loadPtr(JITCompiler::Address(calleeGPR, JSFunction::offsetOfExecutableOrRareData()), rareDataGPR); 14821 14821 slowCases.append(m_jit.branchTestPtr(MacroAssembler::Zero, rareDataGPR, CCallHelpers::TrustedImm32(JSFunction::rareDataTag))); 14822 m_jit.loadPtr(JITCompiler::Address(rareDataGPR, FunctionRareData::offsetOfInternalFunctionAllocationProfile() + InternalFunctionAllocationProfile::offsetOfStructure() - JSFunction::rareDataTag), structureGPR); 14823 slowCases.append(m_jit.branchTestPtr(CCallHelpers::Zero, structureGPR)); 14822 m_jit.load32(JITCompiler::Address(rareDataGPR, FunctionRareData::offsetOfInternalFunctionAllocationProfile() + InternalFunctionAllocationProfile::offsetOfStructureID() - JSFunction::rareDataTag), structureGPR); 14823 slowCases.append(m_jit.branchTest32(CCallHelpers::Zero, structureGPR)); 14824 m_jit.emitNonNullDecodeStructureID(structureGPR, structureGPR); 14824 14825 m_jit.move(TrustedImmPtr(node->isInternalPromise() ? JSInternalPromise::info() : JSPromise::info()), scratch1GPR); 14825 14826 slowCases.append(m_jit.branchPtr(CCallHelpers::NotEqual, scratch1GPR, CCallHelpers::Address(structureGPR, Structure::classInfoOffset()))); … … 14868 14869 m_jit.loadPtr(JITCompiler::Address(calleeGPR, JSFunction::offsetOfExecutableOrRareData()), rareDataGPR); 14869 14870 slowCases.append(m_jit.branchTestPtr(MacroAssembler::Zero, rareDataGPR, CCallHelpers::TrustedImm32(JSFunction::rareDataTag))); 14870 m_jit.loadPtr(JITCompiler::Address(rareDataGPR, FunctionRareData::offsetOfInternalFunctionAllocationProfile() + InternalFunctionAllocationProfile::offsetOfStructure() - JSFunction::rareDataTag), structureGPR); 14871 slowCases.append(m_jit.branchTestPtr(CCallHelpers::Zero, structureGPR)); 14871 m_jit.load32(JITCompiler::Address(rareDataGPR, FunctionRareData::offsetOfInternalFunctionAllocationProfile() + InternalFunctionAllocationProfile::offsetOfStructureID() - JSFunction::rareDataTag), structureGPR); 14872 slowCases.append(m_jit.branchTest32(CCallHelpers::Zero, structureGPR)); 14873 m_jit.emitNonNullDecodeStructureID(structureGPR, structureGPR); 14872 14874 m_jit.move(TrustedImmPtr(JSClass::info()), scratch1GPR); 14873 14875 slowCases.append(m_jit.branchPtr(CCallHelpers::NotEqual, scratch1GPR, CCallHelpers::Address(structureGPR, Structure::classInfoOffset()))); -
branches/safari-613.1.11-branch/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h
r287005 r287006 85 85 macro(FunctionRareData_allocationProfileWatchpointSet, FunctionRareData::offsetOfAllocationProfileWatchpointSet()) \ 86 86 macro(FunctionRareData_executable, FunctionRareData::offsetOfExecutable()) \ 87 macro(FunctionRareData_internalFunctionAllocationProfile_structure, FunctionRareData::offsetOfInternalFunctionAllocationProfile() + InternalFunctionAllocationProfile::offsetOfStructure()) \ 88 macro(FunctionRareData_boundFunctionStructure, FunctionRareData::offsetOfBoundFunctionStructure()) \ 89 macro(FunctionRareData_allocationProfileClearingWatchpoint, FunctionRareData::offsetOfAllocationProfileClearingWatchpoint()) \ 87 macro(FunctionRareData_internalFunctionAllocationProfile_structureID, FunctionRareData::offsetOfInternalFunctionAllocationProfile() + InternalFunctionAllocationProfile::offsetOfStructureID()) \ 90 88 macro(GetterSetter_getter, GetterSetter::offsetOfGetter()) \ 91 89 macro(GetterSetter_setter, GetterSetter::offsetOfSetter()) \ -
branches/safari-613.1.11-branch/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
r287005 r287006 7878 7878 m_out.appendTo(hasRareData, hasStructure); 7879 7879 LValue rareData = m_out.sub(rareDataTags, m_out.constIntPtr(JSFunction::rareDataTag)); 7880 LValue structure = m_out.loadPtr(rareData, m_heaps.FunctionRareData_internalFunctionAllocationProfile_structure);7881 m_out.branch(m_out.isZero 64(structure), rarely(slowCase), usually(hasStructure));7880 LValue structureID = m_out.load32(rareData, m_heaps.FunctionRareData_internalFunctionAllocationProfile_structureID); 7881 m_out.branch(m_out.isZero32(structureID), rarely(slowCase), usually(hasStructure)); 7882 7882 7883 7883 m_out.appendTo(hasStructure, checkGlobalObjectCase); 7884 LValue structure = decodeNonNullStructure(structureID); 7884 7885 m_out.branch(m_out.equal(m_out.loadPtr(structure, m_heaps.Structure_classInfo), m_out.constIntPtr(m_node->isInternalPromise() ? JSInternalPromise::info() : JSPromise::info())), usually(checkGlobalObjectCase), rarely(slowCase)); 7885 7886 … … 7933 7934 m_out.appendTo(hasRareData, hasStructure); 7934 7935 LValue rareData = m_out.sub(rareDataTags, m_out.constIntPtr(JSFunction::rareDataTag)); 7935 LValue structure = m_out.loadPtr(rareData, m_heaps.FunctionRareData_internalFunctionAllocationProfile_structure);7936 m_out.branch(m_out.isZero 64(structure), rarely(slowCase), usually(hasStructure));7936 LValue structureID = m_out.load32(rareData, m_heaps.FunctionRareData_internalFunctionAllocationProfile_structureID); 7937 m_out.branch(m_out.isZero32(structureID), rarely(slowCase), usually(hasStructure)); 7937 7938 7938 7939 m_out.appendTo(hasStructure, checkGlobalObjectCase); 7940 LValue structure = decodeNonNullStructure(structureID); 7939 7941 m_out.branch(m_out.equal(m_out.loadPtr(structure, m_heaps.Structure_classInfo), m_out.constIntPtr(JSClass::info())), usually(checkGlobalObjectCase), rarely(slowCase)); 7940 7942 … … 20974 20976 } 20975 20977 20976 LValue loadStructure(LValue value) 20977 { 20978 LValue structureID = m_out.load32(value, m_heaps.JSCell_structureID); 20978 LValue decodeNonNullStructure(LValue structureID) 20979 { 20979 20980 LValue maskedStructureID = m_out.bitAnd(structureID, m_out.constInt32(structureIDMask)); 20980 20981 return m_out.add(m_out.constIntPtr(g_jscConfig.startOfStructureHeap), m_out.zeroExtPtr(maskedStructureID)); 20982 } 20983 20984 LValue loadStructure(LValue value) 20985 { 20986 LValue structureID = m_out.load32(value, m_heaps.JSCell_structureID); 20987 return decodeNonNullStructure(structureID); 20981 20988 } 20982 20989 -
branches/safari-613.1.11-branch/Source/JavaScriptCore/heap/AbstractSlotVisitor.h
r274601 r287006 49 49 template<typename T> class Weak; 50 50 template<typename T, typename Traits> class WriteBarrierBase; 51 class WriteBarrierStructureID; 51 52 52 53 class AbstractSlotVisitor { … … 144 145 template<typename T, typename Traits> void append(const WriteBarrierBase<T, Traits>&); 145 146 template<typename T, typename Traits> void appendHidden(const WriteBarrierBase<T, Traits>&); 147 void append(const WriteBarrierStructureID&); 148 void appendHidden(const WriteBarrierStructureID&); 146 149 template<typename Iterator> void append(Iterator begin , Iterator end); 147 150 ALWAYS_INLINE void appendValues(const WriteBarrierBase<Unknown, RawValueTraits<Unknown>>*, size_t count); -
branches/safari-613.1.11-branch/Source/JavaScriptCore/heap/AbstractSlotVisitorInlines.h
r277773 r287006 159 159 } 160 160 161 ALWAYS_INLINE void AbstractSlotVisitor::append(const WriteBarrierStructureID& slot) 162 { 163 appendUnbarriered(reinterpret_cast<JSCell*>(slot.get())); 164 } 165 166 ALWAYS_INLINE void AbstractSlotVisitor::appendHidden(const WriteBarrierStructureID& slot) 167 { 168 appendHiddenUnbarriered(reinterpret_cast<JSCell*>(slot.get())); 169 } 170 161 171 ALWAYS_INLINE void AbstractSlotVisitor::appendHiddenUnbarriered(JSValue value) 162 172 { -
branches/safari-613.1.11-branch/Source/JavaScriptCore/heap/SlotVisitor.h
r278093 r287006 93 93 template<typename T, typename Traits> void append(const WriteBarrierBase<T, Traits>&); 94 94 template<typename T, typename Traits> void appendHidden(const WriteBarrierBase<T, Traits>&); 95 void append(const WriteBarrierStructureID&); 96 void appendHidden(const WriteBarrierStructureID&); 95 97 template<typename Iterator> void append(Iterator begin , Iterator end); 96 98 ALWAYS_INLINE void appendValues(const WriteBarrierBase<Unknown, RawValueTraits<Unknown>>*, size_t count); -
branches/safari-613.1.11-branch/Source/JavaScriptCore/heap/SlotVisitorInlines.h
r273138 r287006 117 117 } 118 118 119 ALWAYS_INLINE void SlotVisitor::append(const WriteBarrierStructureID& slot) 120 { 121 appendUnbarriered(reinterpret_cast<JSCell*>(slot.get())); 122 } 123 124 ALWAYS_INLINE void SlotVisitor::appendHidden(const WriteBarrierStructureID& slot) 125 { 126 appendHiddenUnbarriered(reinterpret_cast<JSCell*>(slot.get())); 127 } 128 119 129 template<typename Iterator> 120 130 ALWAYS_INLINE void SlotVisitor::append(Iterator begin, Iterator end) -
branches/safari-613.1.11-branch/Source/JavaScriptCore/jit/AssemblyHelpers.cpp
r286345 r287006 390 390 } 391 391 392 void AssemblyHelpers::emit LoadStructure(VM&,RegisterID source, RegisterID dest)393 { 394 load32(MacroAssembler::Address(source, JSCell::structureIDOffset()), dest);392 void AssemblyHelpers::emitNonNullDecodeStructureID(RegisterID source, RegisterID dest) 393 { 394 move(source, dest); 395 395 #if CPU(ADDRESS64) 396 396 // This could use BFI on arm64 but that only helps if the start of structure heap is encodable as a mov and not as an immediate in the add so it's probably not super important. … … 398 398 add64(TrustedImm64(g_jscConfig.startOfStructureHeap), dest); 399 399 #endif // not CPU(ADDRESS64) 400 } 401 402 void AssemblyHelpers::emitLoadStructure(VM&, RegisterID source, RegisterID dest) 403 { 404 load32(MacroAssembler::Address(source, JSCell::structureIDOffset()), dest); 405 emitNonNullDecodeStructureID(dest, dest); 400 406 } 401 407 -
branches/safari-613.1.11-branch/Source/JavaScriptCore/jit/AssemblyHelpers.h
r287005 r287006 1578 1578 } 1579 1579 1580 void emitNonNullDecodeStructureID(RegisterID source, RegisterID dest); 1580 1581 void emitLoadStructure(VM&, RegisterID source, RegisterID dest); 1581 1582 void emitLoadPrototype(VM&, GPRReg objectGPR, JSValueRegs resultRegs, JumpList& slowPath); -
branches/safari-613.1.11-branch/Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp
r286424 r287006 137 137 { 138 138 jit.load32(CCallHelpers::Address(baseJSR.payloadGPR(), JSCell::structureIDOffset()), scratchGPR); 139 auto doInlineAccess = jit.branch32(CCallHelpers::Equal, scratchGPR, CCallHelpers::Address(stubInfoGPR, StructureStubInfo::offsetOfInlineAccessBaseStructure ()));139 auto doInlineAccess = jit.branch32(CCallHelpers::Equal, scratchGPR, CCallHelpers::Address(stubInfoGPR, StructureStubInfo::offsetOfInlineAccessBaseStructureID())); 140 140 jit.farJump(CCallHelpers::Address(stubInfoGPR, StructureStubInfo::offsetOfCodePtr()), JITStubRoutinePtrTag); 141 141 doInlineAccess.link(&jit); … … 222 222 223 223 jit.load32(CCallHelpers::Address(baseJSR.payloadGPR(), JSCell::structureIDOffset()), scratchGPR); 224 auto doInlineAccess = jit.branch32(CCallHelpers::Equal, scratchGPR, CCallHelpers::Address(stubInfoGPR, StructureStubInfo::offsetOfInlineAccessBaseStructure ()));224 auto doInlineAccess = jit.branch32(CCallHelpers::Equal, scratchGPR, CCallHelpers::Address(stubInfoGPR, StructureStubInfo::offsetOfInlineAccessBaseStructureID())); 225 225 jit.farJump(CCallHelpers::Address(stubInfoGPR, StructureStubInfo::offsetOfCodePtr()), JITStubRoutinePtrTag); 226 226 doInlineAccess.link(&jit); … … 413 413 414 414 jit.load32(CCallHelpers::Address(baseJSR.payloadGPR(), JSCell::structureIDOffset()), scratchGPR); 415 auto skipInlineAccess = jit.branch32(CCallHelpers::NotEqual, scratchGPR, CCallHelpers::Address(stubInfoGPR, StructureStubInfo::offsetOfInlineAccessBaseStructure ()));415 auto skipInlineAccess = jit.branch32(CCallHelpers::NotEqual, scratchGPR, CCallHelpers::Address(stubInfoGPR, StructureStubInfo::offsetOfInlineAccessBaseStructureID())); 416 416 jit.boxBoolean(true, resultJSR); 417 417 auto finished = jit.jump(); -
branches/safari-613.1.11-branch/Source/JavaScriptCore/runtime/FunctionExecutable.cpp
r278588 r287006 79 79 visitor.append(thisObject->m_unlinkedExecutable); 80 80 if (RareData* rareData = thisObject->m_rareData.get()) { 81 visitor.append(rareData->m_cachedPolyProtoStructure );81 visitor.append(rareData->m_cachedPolyProtoStructureID); 82 82 visitor.append(rareData->m_asString); 83 83 if (TemplateObjectMap* map = rareData->m_templateObjectMap.get()) { -
branches/safari-613.1.11-branch/Source/JavaScriptCore/runtime/FunctionExecutable.h
r286347 r287006 258 258 { 259 259 if (UNLIKELY(m_rareData)) 260 return m_rareData->m_cachedPolyProtoStructure .get();260 return m_rareData->m_cachedPolyProtoStructureID.get(); 261 261 return nullptr; 262 262 } 263 263 void setCachedPolyProtoStructure(VM& vm, Structure* structure) 264 264 { 265 ensureRareData().m_cachedPolyProtoStructure .set(vm, this, structure);265 ensureRareData().m_cachedPolyProtoStructureID.set(vm, this, structure); 266 266 } 267 267 … … 311 311 unsigned m_typeProfilingStartOffset { UINT_MAX }; 312 312 unsigned m_typeProfilingEndOffset { UINT_MAX }; 313 WriteBarrierStructureID m_cachedPolyProtoStructureID; 313 314 std::unique_ptr<TemplateObjectMap> m_templateObjectMap; 314 WriteBarrier<Structure> m_cachedPolyProtoStructure;315 315 WriteBarrier<JSString> m_asString; 316 316 }; -
branches/safari-613.1.11-branch/Source/JavaScriptCore/runtime/FunctionRareData.cpp
r285730 r287006 61 61 rareData->m_objectAllocationProfile.visitAggregate(visitor); 62 62 rareData->m_internalFunctionAllocationProfile.visitAggregate(visitor); 63 visitor.append(rareData->m_boundFunctionStructure );63 visitor.append(rareData->m_boundFunctionStructureID); 64 64 visitor.append(rareData->m_executable); 65 65 } -
branches/safari-613.1.11-branch/Source/JavaScriptCore/runtime/FunctionRareData.h
r273138 r287006 73 73 static inline ptrdiff_t offsetOfAllocationProfileWatchpointSet() { return OBJECT_OFFSETOF(FunctionRareData, m_allocationProfileWatchpointSet); } 74 74 static inline ptrdiff_t offsetOfInternalFunctionAllocationProfile() { return OBJECT_OFFSETOF(FunctionRareData, m_internalFunctionAllocationProfile); } 75 static inline ptrdiff_t offsetOfBoundFunctionStructure() { return OBJECT_OFFSETOF(FunctionRareData, m_boundFunctionStructure); }76 75 static inline ptrdiff_t offsetOfExecutable() { return OBJECT_OFFSETOF(FunctionRareData, m_executable); } 77 static inline ptrdiff_t offsetOfAllocationProfileClearingWatchpoint() { return OBJECT_OFFSETOF(FunctionRareData, m_allocationProfileClearingWatchpoint); }78 76 79 77 ObjectAllocationProfileWithPrototype* objectAllocationProfile() … … 114 112 } 115 113 116 Structure* getBoundFunctionStructure() { return m_boundFunctionStructure .get(); }117 void setBoundFunctionStructure(VM& vm, Structure* structure) { m_boundFunctionStructure .set(vm, this, structure); }114 Structure* getBoundFunctionStructure() { return m_boundFunctionStructureID.get(); } 115 void setBoundFunctionStructure(VM& vm, Structure* structure) { m_boundFunctionStructureID.set(vm, this, structure); } 118 116 119 117 ExecutableBase* executable() const { return m_executable.get(); } … … 161 159 InlineWatchpointSet m_allocationProfileWatchpointSet; 162 160 InternalFunctionAllocationProfile m_internalFunctionAllocationProfile; 163 WriteBarrier <Structure> m_boundFunctionStructure;161 WriteBarrierStructureID m_boundFunctionStructureID; 164 162 WriteBarrier<ExecutableBase> m_executable; 165 163 std::unique_ptr<AllocationProfileClearingWatchpoint> m_allocationProfileClearingWatchpoint; -
branches/safari-613.1.11-branch/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
r286313 r287006 2282 2282 property.visit(visitor); 2283 2283 2284 #define VISIT_SIMPLE_TYPE (CapitalName, lowerName, properName, instanceType, jsName, prototypeBase, featureFlag) if (featureFlag) {\2284 #define VISIT_SIMPLE_TYPE_PROTOTYPE(CapitalName, lowerName, properName, instanceType, jsName, prototypeBase, featureFlag) if (featureFlag) \ 2285 2285 visitor.append(thisObject->m_ ## lowerName ## Prototype); \ 2286 2287 #define VISIT_SIMPLE_TYPE_STRUCTURE(CapitalName, lowerName, properName, instanceType, jsName, prototypeBase, featureFlag) if (featureFlag) \ 2286 2288 visitor.append(thisObject->m_ ## properName ## Structure); \ 2287 } 2288 2289 FOR_EACH_SIMPLE_BUILTIN_TYPE(VISIT_SIMPLE_TYPE) 2290 FOR_EACH_BUILTIN_DERIVED_ITERATOR_TYPE(VISIT_SIMPLE_TYPE) 2289 2290 FOR_EACH_SIMPLE_BUILTIN_TYPE(VISIT_SIMPLE_TYPE_STRUCTURE) 2291 FOR_EACH_BUILTIN_DERIVED_ITERATOR_TYPE(VISIT_SIMPLE_TYPE_STRUCTURE) 2292 FOR_EACH_SIMPLE_BUILTIN_TYPE(VISIT_SIMPLE_TYPE_PROTOTYPE) 2293 FOR_EACH_BUILTIN_DERIVED_ITERATOR_TYPE(VISIT_SIMPLE_TYPE_PROTOTYPE) 2291 2294 2292 2295 #define VISIT_LAZY_TYPE(CapitalName, lowerName, properName, instanceType, jsName, prototypeBase, featureFlag) if (featureFlag) \ -
branches/safari-613.1.11-branch/Source/JavaScriptCore/runtime/JSGlobalObject.h
r286313 r287006 377 377 LazyProperty<JSGlobalObject, Structure> m_withScopeStructure; 378 378 LazyProperty<JSGlobalObject, Structure> m_strictEvalActivationStructure; 379 WriteBarrier<Structure> m_lexicalEnvironmentStructure;380 379 LazyProperty<JSGlobalObject, Structure> m_moduleEnvironmentStructure; 381 WriteBarrier<Structure> m_directArgumentsStructure;382 WriteBarrier<Structure> m_scopedArgumentsStructure;383 WriteBarrier<Structure> m_clonedArgumentsStructure;384 385 WriteBarrier<Structure> m_objectStructureForObjectConstructor;386 387 // Lists the actual structures used for having these particular indexing shapes.388 WriteBarrier<Structure> m_originalArrayStructureForIndexingShape[NumberOfArrayIndexingModes];389 // Lists the structures we should use during allocation for these particular indexing shapes.390 // These structures will differ from the originals list above when we are having a bad time.391 WriteBarrier<Structure> m_arrayStructureForIndexingShapeDuringAllocation[NumberOfArrayIndexingModes];392 393 380 LazyProperty<JSGlobalObject, Structure> m_callbackConstructorStructure; 394 381 LazyProperty<JSGlobalObject, Structure> m_callbackFunctionStructure; … … 402 389 LazyProperty<JSGlobalObject, Structure> m_glibWrapperObjectStructure; 403 390 #endif 404 WriteBarrier<Structure> m_nullPrototypeObjectStructure; 405 WriteBarrier<Structure> m_calleeStructure; 406 407 WriteBarrier<Structure> m_hostFunctionStructure; 391 392 WriteBarrierStructureID m_lexicalEnvironmentStructure; 393 WriteBarrierStructureID m_directArgumentsStructure; 394 WriteBarrierStructureID m_scopedArgumentsStructure; 395 WriteBarrierStructureID m_clonedArgumentsStructure; 396 397 WriteBarrierStructureID m_objectStructureForObjectConstructor; 398 399 // Lists the actual structures used for having these particular indexing shapes. 400 WriteBarrierStructureID m_originalArrayStructureForIndexingShape[NumberOfArrayIndexingModes]; 401 // Lists the structures we should use during allocation for these particular indexing shapes. 402 // These structures will differ from the originals list above when we are having a bad time. 403 WriteBarrierStructureID m_arrayStructureForIndexingShapeDuringAllocation[NumberOfArrayIndexingModes]; 404 405 WriteBarrierStructureID m_nullPrototypeObjectStructure; 406 WriteBarrierStructureID m_calleeStructure; 407 408 WriteBarrierStructureID m_hostFunctionStructure; 408 409 409 410 struct FunctionStructures { 410 WriteBarrier <Structure>arrowFunctionStructure;411 WriteBarrier <Structure>sloppyFunctionStructure;412 WriteBarrier <Structure>strictFunctionStructure;411 WriteBarrierStructureID arrowFunctionStructure; 412 WriteBarrierStructureID sloppyFunctionStructure; 413 WriteBarrierStructureID strictFunctionStructure; 413 414 }; 414 415 FunctionStructures m_builtinFunctions; 415 416 FunctionStructures m_ordinaryFunctions; 417 418 PropertyOffset m_functionNameOffset; 419 WriteBarrierStructureID m_shadowRealmObjectStructure; 420 WriteBarrierStructureID m_regExpStructure; 421 WriteBarrierStructureID m_asyncFunctionStructure; 422 WriteBarrierStructureID m_asyncGeneratorFunctionStructure; 423 WriteBarrierStructureID m_generatorFunctionStructure; 424 WriteBarrierStructureID m_generatorStructure; 425 WriteBarrierStructureID m_asyncGeneratorStructure; 426 WriteBarrierStructureID m_arrayIteratorStructure; 427 WriteBarrierStructureID m_mapIteratorStructure; 428 WriteBarrierStructureID m_setIteratorStructure; 429 WriteBarrierStructureID m_regExpMatchesArrayStructure; 430 WriteBarrierStructureID m_regExpMatchesArrayWithIndicesStructure; 431 WriteBarrierStructureID m_regExpMatchesIndicesArrayStructure; 416 432 417 433 LazyProperty<JSGlobalObject, Structure> m_boundFunctionStructure; … … 419 435 LazyProperty<JSGlobalObject, Structure> m_customSetterFunctionStructure; 420 436 LazyProperty<JSGlobalObject, Structure> m_nativeStdFunctionStructure; 421 PropertyOffset m_functionNameOffset;422 WriteBarrier<Structure> m_shadowRealmObjectStructure;423 WriteBarrier<Structure> m_regExpStructure;424 437 WriteBarrier<AsyncFunctionPrototype> m_asyncFunctionPrototype; 425 438 WriteBarrier<AsyncGeneratorFunctionPrototype> m_asyncGeneratorFunctionPrototype; 426 WriteBarrier<Structure> m_asyncFunctionStructure;427 WriteBarrier<Structure> m_asyncGeneratorFunctionStructure;428 WriteBarrier<Structure> m_generatorFunctionStructure;429 WriteBarrier<Structure> m_generatorStructure;430 WriteBarrier<Structure> m_asyncGeneratorStructure;431 WriteBarrier<Structure> m_arrayIteratorStructure;432 WriteBarrier<Structure> m_mapIteratorStructure;433 WriteBarrier<Structure> m_setIteratorStructure;434 439 LazyProperty<JSGlobalObject, Structure> m_iteratorResultObjectStructure; 435 440 LazyProperty<JSGlobalObject, Structure> m_dataPropertyDescriptorObjectStructure; 436 441 LazyProperty<JSGlobalObject, Structure> m_accessorPropertyDescriptorObjectStructure; 437 WriteBarrier<Structure> m_regExpMatchesArrayStructure;438 WriteBarrier<Structure> m_regExpMatchesArrayWithIndicesStructure;439 WriteBarrier<Structure> m_regExpMatchesIndicesArrayStructure;440 442 LazyProperty<JSGlobalObject, Structure> m_moduleRecordStructure; 441 443 LazyProperty<JSGlobalObject, Structure> m_moduleNamespaceObjectStructure; … … 445 447 LazyClassStructure m_sharedArrayBufferStructure; 446 448 447 #define DEFINE_STORAGE_FOR_SIMPLE_TYPE(capitalName, lowerName, properName, instanceType, jsName, prototypeBase, featureFlag) \ 448 WriteBarrier<capitalName ## Prototype> m_ ## lowerName ## Prototype; \ 449 WriteBarrier<Structure> m_ ## properName ## Structure; 449 #define DEFINE_STORAGE_FOR_SIMPLE_TYPE_PROTOTYPE(capitalName, lowerName, properName, instanceType, jsName, prototypeBase, featureFlag) \ 450 WriteBarrier<capitalName ## Prototype> m_ ## lowerName ## Prototype; 451 452 #define DEFINE_STORAGE_FOR_SIMPLE_TYPE_STRUCTURE(capitalName, lowerName, properName, instanceType, jsName, prototypeBase, featureFlag) \ 453 WriteBarrierStructureID m_ ## properName ## Structure; 450 454 451 455 #define DEFINE_STORAGE_FOR_LAZY_TYPE(capitalName, lowerName, properName, instanceType, jsName, prototypeBase, featureFlag) \ 452 456 LazyClassStructure m_ ## properName ## Structure; 453 457 454 FOR_EACH_SIMPLE_BUILTIN_TYPE(DEFINE_STORAGE_FOR_SIMPLE_TYPE) 455 FOR_EACH_BUILTIN_DERIVED_ITERATOR_TYPE(DEFINE_STORAGE_FOR_SIMPLE_TYPE) 458 FOR_EACH_SIMPLE_BUILTIN_TYPE(DEFINE_STORAGE_FOR_SIMPLE_TYPE_STRUCTURE) 459 FOR_EACH_BUILTIN_DERIVED_ITERATOR_TYPE(DEFINE_STORAGE_FOR_SIMPLE_TYPE_STRUCTURE) 460 FOR_EACH_SIMPLE_BUILTIN_TYPE(DEFINE_STORAGE_FOR_SIMPLE_TYPE_PROTOTYPE) 461 FOR_EACH_BUILTIN_DERIVED_ITERATOR_TYPE(DEFINE_STORAGE_FOR_SIMPLE_TYPE_PROTOTYPE) 456 462 457 463 #if ENABLE(WEBASSEMBLY) … … 465 471 FOR_EACH_LAZY_BUILTIN_TYPE(DEFINE_STORAGE_FOR_LAZY_TYPE) 466 472 467 #undef DEFINE_STORAGE_FOR_SIMPLE_TYPE 473 #undef DEFINE_STORAGE_FOR_SIMPLE_TYPE_PROTOTYPE 474 #undef DEFINE_STORAGE_FOR_SIMPLE_TYPE_STRUCTURE 468 475 #undef DEFINE_STORAGE_FOR_LAZY_TYPE 469 476 … … 575 582 bool m_evalEnabled { true }; 576 583 bool m_webAssemblyEnabled { true }; 584 bool m_needsSiteSpecificQuirks { false }; 577 585 unsigned m_globalLexicalBindingEpoch { 1 }; 578 586 String m_evalDisabledErrorMessage; … … 1195 1203 JS_EXPORT_PRIVATE static void clearRareData(JSCell*); 1196 1204 1197 bool m_needsSiteSpecificQuirks { false };1198 1205 #if JSC_OBJC_API_ENABLED 1199 1206 RetainPtr<JSWrapperMap> m_wrapperMap; -
branches/safari-613.1.11-branch/Source/JavaScriptCore/runtime/JSPropertyNameEnumerator.cpp
r286347 r287006 51 51 : JSCell(vm, vm.propertyNameEnumeratorStructure.get()) 52 52 , m_propertyNames(vm, this, propertyNamesBuffer) 53 , m_cachedStructureID( structure ? structure->id() : StructureID())53 , m_cachedStructureID(vm, this, structure, WriteBarrierStructureID::MayBeNull) 54 54 , m_indexedLength(indexedLength) 55 55 , m_endStructurePropertyIndex(numberStructureProperties) … … 87 87 visitor.append(propertyNames, propertyNames + thisObject->sizeOfPropertyNames()); 88 88 } 89 90 if (thisObject->cachedStructureID()) 91 visitor.appendUnbarriered(thisObject->cachedStructureID().decode()); 89 visitor.append(thisObject->m_cachedStructureID); 92 90 } 93 91 -
branches/safari-613.1.11-branch/Source/JavaScriptCore/runtime/JSPropertyNameEnumerator.h
r286347 r287006 74 74 { 75 75 UNUSED_PARAM(vm); 76 if (!m_cachedStructureID) 77 return nullptr; 78 return m_cachedStructureID.decode(); 76 return m_cachedStructureID.get(); 79 77 } 80 StructureID cachedStructureID() const { return m_cachedStructureID ; }78 StructureID cachedStructureID() const { return m_cachedStructureID.value(); } 81 79 uint32_t indexedLength() const { return m_indexedLength; } 82 80 uint32_t endStructurePropertyIndex() const { return m_endStructurePropertyIndex; } … … 109 107 // After instantiating JSPropertyNameEnumerator, we must not change any fields. 110 108 AuxiliaryBarrier<WriteBarrier<JSString>*> m_propertyNames; 111 StructureID m_cachedStructureID;109 WriteBarrierStructureID m_cachedStructureID; 112 110 uint32_t m_indexedLength; 113 111 uint32_t m_endStructurePropertyIndex; -
branches/safari-613.1.11-branch/Source/JavaScriptCore/runtime/StructureRareData.cpp
r285730 r287006 61 61 StructureRareData::StructureRareData(VM& vm, Structure* previous) 62 62 : JSCell(vm, vm.structureRareDataStructure.get()) 63 , m_previous(vm, this, previous, WriteBarrierStructureID::MayBeNull) 63 64 , m_maxOffset(invalidOffset) 64 65 , m_transitionOffset(invalidOffset) 65 66 { 66 if (previous)67 m_previous.set(vm, this, previous);68 67 } 69 68 -
branches/safari-613.1.11-branch/Source/JavaScriptCore/runtime/StructureRareData.h
r286347 r287006 141 141 bool tryCachePropertyNameEnumeratorViaWatchpoint(VM&, Structure*, StructureChain*); 142 142 143 WriteBarrier<Structure> m_previous;144 143 // FIXME: We should have some story for clearing these property names caches in GC. 145 144 // https://bugs.webkit.org/show_bug.cgi?id=192659 … … 157 156 Box<InlineWatchpointSet> m_polyProtoWatchpoint; 158 157 158 WriteBarrierStructureID m_previous; 159 159 PropertyOffset m_maxOffset; 160 160 PropertyOffset m_transitionOffset; -
branches/safari-613.1.11-branch/Source/JavaScriptCore/runtime/WriteBarrier.h
r268993 r287006 28 28 #include "GCAssertions.h" 29 29 #include "HandleTypes.h" 30 #include "StructureID.h" 30 31 #include <type_traits> 31 32 #include <wtf/RawPtrTraits.h> … … 249 250 } 250 251 252 class WriteBarrierStructureID { 253 public: 254 constexpr WriteBarrierStructureID() = default; 255 256 WriteBarrierStructureID(VM& vm, const JSCell* owner, Structure* value) 257 { 258 set(vm, owner, value); 259 } 260 261 WriteBarrierStructureID(DFG::DesiredWriteBarrier&, Structure* value) 262 { 263 ASSERT(isCompilationThread()); 264 setWithoutWriteBarrier(value); 265 } 266 267 enum MayBeNullTag { MayBeNull }; 268 WriteBarrierStructureID(VM& vm, const JSCell* owner, Structure* value, MayBeNullTag) 269 { 270 setMayBeNull(vm, owner, value); 271 } 272 273 void set(VM&, const JSCell* owner, Structure* value); 274 275 void setMayBeNull(VM&, const JSCell* owner, Structure* value); 276 277 // Should only be used by JSCell during early initialisation 278 // when some basic types aren't yet completely instantiated 279 void setEarlyValue(VM&, const JSCell* owner, Structure* value); 280 281 Structure* get() const 282 { 283 // Copy m_structureID to a local to avoid multiple-read issues. (See <http://webkit.org/b/110854>) 284 StructureID structureID = m_structureID; 285 if (structureID) { 286 Structure* structure = structureID.decode(); 287 validateCell(reinterpret_cast<JSCell*>(structure)); 288 return structure; 289 } 290 return nullptr; 291 } 292 293 Structure* operator*() const 294 { 295 StructureID structureID = m_structureID; 296 ASSERT(structureID); 297 Structure* structure = structureID.decode(); 298 validateCell(reinterpret_cast<JSCell*>(structure)); 299 return structure; 300 } 301 302 Structure* operator->() const 303 { 304 StructureID structureID = m_structureID; 305 ASSERT(structureID); 306 Structure* structure = structureID.decode(); 307 validateCell(reinterpret_cast<JSCell*>(structure)); 308 return structure; 309 } 310 311 void clear() 312 { 313 m_structureID = { }; 314 } 315 316 explicit operator bool() const 317 { 318 return !!m_structureID; 319 } 320 321 bool operator!() const 322 { 323 return !m_structureID; 324 } 325 326 void setWithoutWriteBarrier(Structure* value) 327 { 328 #if ENABLE(WRITE_BARRIER_PROFILING) 329 WriteBarrierCounters::usesWithoutBarrierFromCpp.count(); 330 #endif 331 if (!value) { 332 m_structureID = { }; 333 return; 334 } 335 m_structureID = StructureID::encode(value); 336 } 337 338 Structure* unvalidatedGet() const 339 { 340 StructureID structureID = m_structureID; 341 if (structureID) 342 return structureID.decode(); 343 return nullptr; 344 } 345 346 StructureID value() const { return m_structureID; } 347 348 private: 349 StructureID m_structureID; 350 }; 351 251 352 } // namespace JSC -
branches/safari-613.1.11-branch/Source/JavaScriptCore/runtime/WriteBarrierInlines.h
r285687 r287006 62 62 } 63 63 64 inline void WriteBarrierStructureID::set(VM& vm, const JSCell* owner, Structure* value) 65 { 66 ASSERT(value); 67 ASSERT(!Options::useConcurrentJIT() || !isCompilationThread()); 68 validateCell(reinterpret_cast<JSCell*>(value)); 69 setEarlyValue(vm, owner, value); 70 } 71 72 inline void WriteBarrierStructureID::setMayBeNull(VM& vm, const JSCell* owner, Structure* value) 73 { 74 if (value) 75 validateCell(reinterpret_cast<JSCell*>(value)); 76 setEarlyValue(vm, owner, value); 77 } 78 79 inline void WriteBarrierStructureID::setEarlyValue(VM& vm, const JSCell* owner, Structure* value) 80 { 81 if (!value) { 82 m_structureID = { }; 83 return; 84 } 85 m_structureID = StructureID::encode(value); 86 vm.writeBarrier(owner, reinterpret_cast<JSCell*>(value)); 87 } 88 64 89 } // namespace JSC -
branches/safari-613.1.11-branch/Source/JavaScriptCore/tools/JSDollarVM.cpp
r286347 r287006 4013 4013 addFunction(vm, "ensureArrayStorage", functionEnsureArrayStorage, 1); 4014 4014 4015 m_objectDoingSideEffectPutWithoutCorrectSlotStatusStructure .set(vm, this, ObjectDoingSideEffectPutWithoutCorrectSlotStatus::createStructure(vm, globalObject, jsNull()));4015 m_objectDoingSideEffectPutWithoutCorrectSlotStatusStructureID.set(vm, this, ObjectDoingSideEffectPutWithoutCorrectSlotStatus::createStructure(vm, globalObject, jsNull())); 4016 4016 } 4017 4017 … … 4035 4035 JSDollarVM* thisObject = jsCast<JSDollarVM*>(cell); 4036 4036 Base::visitChildren(thisObject, visitor); 4037 visitor.append(thisObject->m_objectDoingSideEffectPutWithoutCorrectSlotStatusStructure );4037 visitor.append(thisObject->m_objectDoingSideEffectPutWithoutCorrectSlotStatusStructureID); 4038 4038 } 4039 4039 -
branches/safari-613.1.11-branch/Source/JavaScriptCore/tools/JSDollarVM.h
r286347 r287006 62 62 } 63 63 64 Structure* objectDoingSideEffectPutWithoutCorrectSlotStatusStructure() { return m_objectDoingSideEffectPutWithoutCorrectSlotStatusStructure .get(); }64 Structure* objectDoingSideEffectPutWithoutCorrectSlotStatusStructure() { return m_objectDoingSideEffectPutWithoutCorrectSlotStatusStructureID.get(); } 65 65 66 66 private: … … 77 77 DECLARE_VISIT_CHILDREN; 78 78 79 WriteBarrier <Structure> m_objectDoingSideEffectPutWithoutCorrectSlotStatusStructure;79 WriteBarrierStructureID m_objectDoingSideEffectPutWithoutCorrectSlotStatusStructureID; 80 80 }; 81 81
Note:
See TracChangeset
for help on using the changeset viewer.