Changeset 226725 in webkit for trunk/Source/JavaScriptCore/bytecode/CodeBlock.h
- Timestamp:
- Jan 10, 2018, 11:41:12 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecode/CodeBlock.h
r226667 r226725 88 88 class CodeBlockSet; 89 89 class ExecState; 90 class ExecutableToCodeBlockEdge;91 90 class JSModuleEnvironment; 92 91 class LLIntOffsetsExtractor; … … 109 108 friend class LLIntOffsetsExtractor; 110 109 110 struct UnconditionalFinalizer : public JSC::UnconditionalFinalizer { 111 UnconditionalFinalizer(CodeBlock& codeBlock) 112 : codeBlock(codeBlock) 113 { } 114 void finalizeUnconditionally() override; 115 CodeBlock& codeBlock; 116 }; 117 118 struct WeakReferenceHarvester : public JSC::WeakReferenceHarvester { 119 WeakReferenceHarvester(CodeBlock& codeBlock) 120 : codeBlock(codeBlock) 121 { } 122 void visitWeakReferences(SlotVisitor&) override; 123 CodeBlock& codeBlock; 124 }; 125 111 126 public: 112 127 … … 114 129 115 130 static const unsigned StructureFlags = Base::StructureFlags | StructureIsImmortal; 116 static const bool needsDestruction = true;117 118 template<typename>119 static void subspaceFor(VM&) { }120 131 121 132 DECLARE_INFO; … … 127 138 void finishCreation(VM&, CopyParsedBlockTag, CodeBlock& other); 128 139 bool finishCreation(VM&, ScriptExecutable* ownerExecutable, UnlinkedCodeBlock*, JSScope*); 129 130 void finishCreationCommon(VM&);131 140 132 141 WriteBarrier<JSGlobalObject> m_globalObject; … … 192 201 static void visitChildren(JSCell*, SlotVisitor&); 193 202 void visitChildren(SlotVisitor&); 194 void finalizeUnconditionally(VM&); 203 void visitWeakly(SlotVisitor&); 204 void clearVisitWeaklyHasBeenCalled(); 195 205 196 206 void dumpSource(); … … 360 370 ExecutableBase* ownerExecutable() const { return m_ownerExecutable.get(); } 361 371 ScriptExecutable* ownerScriptExecutable() const { return jsCast<ScriptExecutable*>(m_ownerExecutable.get()); } 362 363 ExecutableToCodeBlockEdge* ownerEdge() const { return m_ownerEdge.get(); }364 372 365 373 VM* vm() const { return m_poisonedVM.unpoisoned(); } … … 822 830 mutable ConcurrentJSLock m_lock; 823 831 832 bool m_visitWeaklyHasBeenCalled; 833 824 834 bool m_shouldAlwaysBeInlined; // Not a bitfield because the JIT wants to store to it. 825 835 … … 909 919 private: 910 920 friend class CodeBlockSet; 911 friend class ExecutableToCodeBlockEdge;912 921 913 922 BytecodeLivenessAnalysis& livenessAnalysisSlow(); … … 974 983 }; 975 984 WriteBarrier<ExecutableBase> m_ownerExecutable; 976 WriteBarrier<ExecutableToCodeBlockEdge> m_ownerEdge;977 985 ConstExprPoisoned<CodeBlockPoison, VM*> m_poisonedVM; 978 986 … … 1039 1047 1040 1048 std::unique_ptr<RareData> m_rareData; 1049 1050 PoisonedUniquePtr<CodeBlockPoison, UnconditionalFinalizer> m_unconditionalFinalizer; 1051 PoisonedUniquePtr<CodeBlockPoison, WeakReferenceHarvester> m_weakReferenceHarvester; 1041 1052 }; 1042 1053 … … 1063 1074 { 1064 1075 return uncheckedR(reg.offset()); 1076 } 1077 1078 inline void CodeBlock::clearVisitWeaklyHasBeenCalled() 1079 { 1080 m_visitWeaklyHasBeenCalled = false; 1065 1081 } 1066 1082
Note:
See TracChangeset
for help on using the changeset viewer.