| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "CheckFinalizerVisitor.h" | 5 #include "CheckFinalizerVisitor.h" |
| 6 | 6 |
| 7 using namespace clang; | 7 using namespace clang; |
| 8 | 8 |
| 9 namespace { | 9 namespace { |
| 10 | 10 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 | 100 |
| 101 bool CheckFinalizerVisitor::VisitMemberExpr(MemberExpr* member) { | 101 bool CheckFinalizerVisitor::VisitMemberExpr(MemberExpr* member) { |
| 102 FieldDecl* field = dyn_cast<FieldDecl>(member->getMemberDecl()); | 102 FieldDecl* field = dyn_cast<FieldDecl>(member->getMemberDecl()); |
| 103 if (!field) | 103 if (!field) |
| 104 return true; | 104 return true; |
| 105 | 105 |
| 106 RecordInfo* info = cache_->Lookup(field->getParent()); | 106 RecordInfo* info = cache_->Lookup(field->getParent()); |
| 107 if (!info) | 107 if (!info) |
| 108 return true; | 108 return true; |
| 109 | 109 |
| 110 RecordInfo::Fields::iterator it = info->GetFields().find(field); | 110 if (!info->HasField(field)) |
| 111 if (it == info->GetFields().end()) | |
| 112 return true; | 111 return true; |
| 113 | 112 |
| 114 if (seen_members_.find(member) != seen_members_.end()) | 113 if (seen_members_.find(member) != seen_members_.end()) |
| 115 return true; | 114 return true; |
| 116 | 115 |
| 117 bool as_eagerly_finalized = false; | 116 bool as_eagerly_finalized = false; |
| 118 if (blacklist_context_ && | 117 if (blacklist_context_ && |
| 119 MightBeCollected(&it->second, &as_eagerly_finalized)) { | 118 MightBeCollected(&info->GetField(field).second, &as_eagerly_finalized)) { |
| 120 finalized_fields_.push_back( | 119 finalized_fields_.push_back( |
| 121 Error(member, as_eagerly_finalized, &it->second)); | 120 Error(member, as_eagerly_finalized, &info->GetField(field).second)); |
| 122 seen_members_.insert(member); | 121 seen_members_.insert(member); |
| 123 } | 122 } |
| 124 return true; | 123 return true; |
| 125 } | 124 } |
| 126 | 125 |
| 127 bool CheckFinalizerVisitor::MightBeCollected(FieldPoint* point, | 126 bool CheckFinalizerVisitor::MightBeCollected(FieldPoint* point, |
| 128 bool* as_eagerly_finalized) { | 127 bool* as_eagerly_finalized) { |
| 129 MightBeCollectedVisitor visitor(is_eagerly_finalized_); | 128 MightBeCollectedVisitor visitor(is_eagerly_finalized_); |
| 130 point->edge()->Accept(&visitor); | 129 point->edge()->Accept(&visitor); |
| 131 *as_eagerly_finalized = visitor.as_eagerly_finalized(); | 130 *as_eagerly_finalized = visitor.as_eagerly_finalized(); |
| 132 return visitor.might_be_collected(); | 131 return visitor.might_be_collected(); |
| 133 } | 132 } |
| OLD | NEW |