Movatterモバイル変換


[0]ホーム

URL:


Google Git
Sign in
chromium /chromium /src /main /. /tools /clang /blink_gc_plugin /Edge.cpp
blob: b573e6808ab3ccbcc5b2cb8a2539d322241369fc [file] [log] [blame]
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include"Config.h"
#include"Edge.h"
#include"RecordInfo.h"
TracingStatusValue::NeedsTracing(NeedsTracingOption option){
return value_->NeedsTracing(option);
}
boolValue::NeedsFinalization(){return value_->NeedsFinalization();}
Collection::Collection(RecordInfo* info)
: info_(info), on_heap_(Config::IsGCCollection(info_->name())){}
boolCollection::NeedsFinalization(){return info_->NeedsFinalization();}
boolCollection::IsSTDCollection(){
returnConfig::IsSTDCollection(info_->name());
}
std::stringCollection::GetCollectionName()const{
return info_->name();
}
TracingStatusCollection::NeedsTracing(NeedsTracingOption){
if(on_heap_){
returnTracingStatus::Needed();
}
// This will be handled by matchers.
if(IsSTDCollection()){
if((GetCollectionName()=="array")&&!members_.empty()){
Edge* type= members_.at(0);
if(type->IsMember()|| type->IsWeakMember()||
type->IsTraceWrapperV8Reference()){
returnTracingStatus::Needed();
}
}
returnTracingStatus::Unknown();
}
// For off-heap collections, determine tracing status of members.
TracingStatus status=TracingStatus::Unneeded();
for(Members::iterator it= members_.begin(); it!= members_.end();++it){
// Do a non-recursive test here since members could equal the holder.
status= status.LUB((*it)->NeedsTracing(kNonRecursive));
}
return status;
}
Iterator::Iterator(RecordInfo* info)
: info_(info), on_heap_(Config::IsGCCollection(info_->name())){}
voidRecursiveEdgeVisitor::AtValue(Value*){}
voidRecursiveEdgeVisitor::AtRawPtr(RawPtr*){}
voidRecursiveEdgeVisitor::AtRefPtr(RefPtr*){}
voidRecursiveEdgeVisitor::AtUniquePtr(UniquePtr*){}
voidRecursiveEdgeVisitor::AtMember(Member*){}
voidRecursiveEdgeVisitor::AtWeakMember(WeakMember*){}
voidRecursiveEdgeVisitor::AtPersistent(Persistent*){}
voidRecursiveEdgeVisitor::AtCrossThreadPersistent(CrossThreadPersistent*){}
voidRecursiveEdgeVisitor::AtCollection(Collection*){}
voidRecursiveEdgeVisitor::AtIterator(Iterator*){}
voidRecursiveEdgeVisitor::AtTraceWrapperV8Reference(TraceWrapperV8Reference*){
}
voidRecursiveEdgeVisitor::AtArrayEdge(ArrayEdge*){}
voidRecursiveEdgeVisitor::VisitValue(Value* e){
AtValue(e);
}
voidRecursiveEdgeVisitor::VisitRawPtr(RawPtr* e){
AtRawPtr(e);
Enter(e);
e->ptr()->Accept(this);
Leave();
}
voidRecursiveEdgeVisitor::VisitRefPtr(RefPtr* e){
AtRefPtr(e);
Enter(e);
e->ptr()->Accept(this);
Leave();
}
voidRecursiveEdgeVisitor::VisitUniquePtr(UniquePtr* e){
AtUniquePtr(e);
Enter(e);
e->ptr()->Accept(this);
Leave();
}
voidRecursiveEdgeVisitor::VisitMember(Member* e){
AtMember(e);
Enter(e);
e->ptr()->Accept(this);
Leave();
}
voidRecursiveEdgeVisitor::VisitWeakMember(WeakMember* e){
AtWeakMember(e);
Enter(e);
e->ptr()->Accept(this);
Leave();
}
voidRecursiveEdgeVisitor::VisitPersistent(Persistent* e){
AtPersistent(e);
Enter(e);
e->ptr()->Accept(this);
Leave();
}
voidRecursiveEdgeVisitor::VisitCrossThreadPersistent(
CrossThreadPersistent* e){
AtCrossThreadPersistent(e);
Enter(e);
e->ptr()->Accept(this);
Leave();
}
voidRecursiveEdgeVisitor::VisitCollection(Collection* e){
AtCollection(e);
Enter(e);
e->AcceptMembers(this);
Leave();
}
voidRecursiveEdgeVisitor::VisitIterator(Iterator* e){
AtIterator(e);
}
voidRecursiveEdgeVisitor::VisitTraceWrapperV8Reference(
TraceWrapperV8Reference* e){
AtTraceWrapperV8Reference(e);
Enter(e);
e->ptr()->Accept(this);
Leave();
}
voidRecursiveEdgeVisitor::VisitArrayEdge(ArrayEdge* e){
AtArrayEdge(e);
}

[8]ページ先頭

©2009-2025 Movatter.jp