X-Git-Url: http://git.webkit.org/?p=WebKit-https.git;a=blobdiff_plain;f=Source%2FJavaScriptCore%2Fbytecode%2FStructureStubInfo.cpp;h=77531c5d2558992df280f18e20ee68dd14fcb0c8;hp=d925cfcdea30405e82412dd999460e000a596119;hb=faf049d1a98f426127cabf0cf5e0892286ad234e;hpb=fb7ad05a3cc9e904e6e6c338f3dc162102def410 diff --git a/Source/JavaScriptCore/bytecode/StructureStubInfo.cpp b/Source/JavaScriptCore/bytecode/StructureStubInfo.cpp index d925cfc..77531c5 100644 --- a/Source/JavaScriptCore/bytecode/StructureStubInfo.cpp +++ b/Source/JavaScriptCore/bytecode/StructureStubInfo.cpp @@ -230,7 +230,10 @@ void StructureStubInfo::visitWeakReferences(CodeBlock* codeBlock) { VM& vm = *codeBlock->vm(); - bufferedStructures.clear(); + bufferedStructures.genericFilter( + [&] (Structure* structure) -> bool { + return Heap::isMarked(structure); + }); switch (cacheType) { case CacheType::GetByIdSelf: @@ -250,6 +253,22 @@ void StructureStubInfo::visitWeakReferences(CodeBlock* codeBlock) resetByGC = true; } +bool StructureStubInfo::propagateTransitions(SlotVisitor& visitor) +{ + switch (cacheType) { + case CacheType::Unset: + return true; + case CacheType::GetByIdSelf: + case CacheType::PutByIdReplace: + return u.byIdSelf.baseObjectStructure->markIfCheap(visitor); + case CacheType::Stub: + return u.stub->propagateTransitions(visitor); + } + + RELEASE_ASSERT_NOT_REACHED(); + return true; +} + bool StructureStubInfo::containsPC(void* pc) const { if (cacheType != CacheType::Stub)