OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "Config.h" | 5 #include "Config.h" |
6 #include "RecordInfo.h" | 6 #include "RecordInfo.h" |
7 | 7 |
8 using namespace clang; | 8 using namespace clang; |
9 using std::string; | 9 using std::string; |
10 | 10 |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 DetermineTracingMethods(); | 265 DetermineTracingMethods(); |
266 return finalize_dispatch_method_; | 266 return finalize_dispatch_method_; |
267 } | 267 } |
268 | 268 |
269 RecordInfo::Bases& RecordInfo::GetBases() { | 269 RecordInfo::Bases& RecordInfo::GetBases() { |
270 if (!bases_) | 270 if (!bases_) |
271 bases_ = CollectBases(); | 271 bases_ = CollectBases(); |
272 return *bases_; | 272 return *bases_; |
273 } | 273 } |
274 | 274 |
275 bool RecordInfo::InheritsNonPureTrace() { | 275 bool RecordInfo::InheritsTrace() { |
276 if (CXXMethodDecl* trace = GetTraceMethod()) | 276 if (GetTraceMethod()) |
277 return !trace->isPure(); | 277 return true; |
278 for (Bases::iterator it = GetBases().begin(); it != GetBases().end(); ++it) { | 278 for (Bases::iterator it = GetBases().begin(); it != GetBases().end(); ++it) { |
279 if (it->second.info()->InheritsNonPureTrace()) | 279 if (it->second.info()->InheritsTrace()) |
280 return true; | 280 return true; |
281 } | 281 } |
282 return false; | 282 return false; |
283 } | 283 } |
284 | 284 |
285 CXXMethodDecl* RecordInfo::InheritsNonVirtualTrace() { | 285 CXXMethodDecl* RecordInfo::InheritsNonVirtualTrace() { |
286 if (CXXMethodDecl* trace = GetTraceMethod()) | 286 if (CXXMethodDecl* trace = GetTraceMethod()) |
287 return trace->isVirtual() ? 0 : trace; | 287 return trace->isVirtual() ? 0 : trace; |
288 for (Bases::iterator it = GetBases().begin(); it != GetBases().end(); ++it) { | 288 for (Bases::iterator it = GetBases().begin(); it != GetBases().end(); ++it) { |
289 if (CXXMethodDecl* trace = it->second.info()->InheritsNonVirtualTrace()) | 289 if (CXXMethodDecl* trace = it->second.info()->InheritsNonVirtualTrace()) |
(...skipping 26 matching lines...) Expand all Loading... |
316 if (!record_->hasDefinition()) | 316 if (!record_->hasDefinition()) |
317 return bases; | 317 return bases; |
318 for (CXXRecordDecl::base_class_iterator it = record_->bases_begin(); | 318 for (CXXRecordDecl::base_class_iterator it = record_->bases_begin(); |
319 it != record_->bases_end(); | 319 it != record_->bases_end(); |
320 ++it) { | 320 ++it) { |
321 const CXXBaseSpecifier& spec = *it; | 321 const CXXBaseSpecifier& spec = *it; |
322 RecordInfo* info = cache_->Lookup(spec.getType()); | 322 RecordInfo* info = cache_->Lookup(spec.getType()); |
323 if (!info) | 323 if (!info) |
324 continue; | 324 continue; |
325 CXXRecordDecl* base = info->record(); | 325 CXXRecordDecl* base = info->record(); |
326 TracingStatus status = info->InheritsNonPureTrace() | 326 TracingStatus status = info->InheritsTrace() |
327 ? TracingStatus::Needed() | 327 ? TracingStatus::Needed() |
328 : TracingStatus::Unneeded(); | 328 : TracingStatus::Unneeded(); |
329 bases->insert(std::make_pair(base, BasePoint(spec, info, status))); | 329 bases->insert(std::make_pair(base, BasePoint(spec, info, status))); |
330 } | 330 } |
331 return bases; | 331 return bases; |
332 } | 332 } |
333 | 333 |
334 RecordInfo::Fields& RecordInfo::GetFields() { | 334 RecordInfo::Fields& RecordInfo::GetFields() { |
335 if (!fields_) | 335 if (!fields_) |
336 fields_ = CollectFields(); | 336 fields_ = CollectFields(); |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
516 edge->members().push_back(member); | 516 edge->members().push_back(member); |
517 } | 517 } |
518 // TODO: Handle the case where we fail to create an edge (eg, if the | 518 // TODO: Handle the case where we fail to create an edge (eg, if the |
519 // argument is a primitive type or just not fully known yet). | 519 // argument is a primitive type or just not fully known yet). |
520 } | 520 } |
521 return edge; | 521 return edge; |
522 } | 522 } |
523 | 523 |
524 return new Value(info); | 524 return new Value(info); |
525 } | 525 } |
OLD | NEW |