| 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 566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 577 return fields_need_tracing_; | 577 return fields_need_tracing_; |
| 578 } | 578 } |
| 579 | 579 |
| 580 Edge* RecordInfo::CreateEdge(const Type* type) { | 580 Edge* RecordInfo::CreateEdge(const Type* type) { |
| 581 if (!type) { | 581 if (!type) { |
| 582 return 0; | 582 return 0; |
| 583 } | 583 } |
| 584 | 584 |
| 585 if (type->isPointerType() || type->isReferenceType()) { | 585 if (type->isPointerType() || type->isReferenceType()) { |
| 586 if (Edge* ptr = CreateEdge(type->getPointeeType().getTypePtrOrNull())) | 586 if (Edge* ptr = CreateEdge(type->getPointeeType().getTypePtrOrNull())) |
| 587 return new RawPtr(ptr, false, type->isReferenceType()); | 587 return new RawPtr(ptr, type->isReferenceType()); |
| 588 return 0; | 588 return 0; |
| 589 } | 589 } |
| 590 | 590 |
| 591 RecordInfo* info = cache_->Lookup(type); | 591 RecordInfo* info = cache_->Lookup(type); |
| 592 | 592 |
| 593 // If the type is neither a pointer or a C++ record we ignore it. | 593 // If the type is neither a pointer or a C++ record we ignore it. |
| 594 if (!info) { | 594 if (!info) { |
| 595 return 0; | 595 return 0; |
| 596 } | 596 } |
| 597 | 597 |
| 598 TemplateArgs args; | 598 TemplateArgs args; |
| 599 | 599 |
| 600 if (Config::IsRawPtr(info->name()) && info->GetTemplateArgs(1, &args)) { | |
| 601 if (Edge* ptr = CreateEdge(args[0])) | |
| 602 return new RawPtr(ptr, true, false); | |
| 603 return 0; | |
| 604 } | |
| 605 | |
| 606 if (Config::IsRefPtr(info->name()) && info->GetTemplateArgs(1, &args)) { | 600 if (Config::IsRefPtr(info->name()) && info->GetTemplateArgs(1, &args)) { |
| 607 if (Edge* ptr = CreateEdge(args[0])) | 601 if (Edge* ptr = CreateEdge(args[0])) |
| 608 return new RefPtr(ptr); | 602 return new RefPtr(ptr); |
| 609 return 0; | 603 return 0; |
| 610 } | 604 } |
| 611 | 605 |
| 612 if (Config::IsOwnPtr(info->name()) && info->GetTemplateArgs(1, &args)) { | 606 if (Config::IsOwnPtr(info->name()) && info->GetTemplateArgs(1, &args)) { |
| 613 if (Edge* ptr = CreateEdge(args[0])) | 607 if (Edge* ptr = CreateEdge(args[0])) |
| 614 return new OwnPtr(ptr); | 608 return new OwnPtr(ptr); |
| 615 return 0; | 609 return 0; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 654 edge->members().push_back(member); | 648 edge->members().push_back(member); |
| 655 } | 649 } |
| 656 // TODO: Handle the case where we fail to create an edge (eg, if the | 650 // TODO: Handle the case where we fail to create an edge (eg, if the |
| 657 // argument is a primitive type or just not fully known yet). | 651 // argument is a primitive type or just not fully known yet). |
| 658 } | 652 } |
| 659 return edge; | 653 return edge; |
| 660 } | 654 } |
| 661 | 655 |
| 662 return new Value(info); | 656 return new Value(info); |
| 663 } | 657 } |
| OLD | NEW |