| 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 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 585 GetFields(); | 585 GetFields(); |
| 586 | 586 |
| 587 return fields_need_tracing_; | 587 return fields_need_tracing_; |
| 588 } | 588 } |
| 589 | 589 |
| 590 Edge* RecordInfo::CreateEdge(const Type* type) { | 590 Edge* RecordInfo::CreateEdge(const Type* type) { |
| 591 if (!type) { | 591 if (!type) { |
| 592 return 0; | 592 return 0; |
| 593 } | 593 } |
| 594 | 594 |
| 595 if (type->isPointerType() || type->isReferenceType()) { | 595 if (type->isPointerType()) { |
| 596 if (Edge* ptr = CreateEdge(type->getPointeeType().getTypePtrOrNull())) | 596 if (Edge* ptr = CreateEdge(type->getPointeeType().getTypePtrOrNull())) |
| 597 return new RawPtr(ptr, false, type->isReferenceType()); | 597 return new RawPtr(ptr, false); |
| 598 return 0; | 598 return 0; |
| 599 } | 599 } |
| 600 | 600 |
| 601 RecordInfo* info = cache_->Lookup(type); | 601 RecordInfo* info = cache_->Lookup(type); |
| 602 | 602 |
| 603 // If the type is neither a pointer or a C++ record we ignore it. | 603 // If the type is neither a pointer or a C++ record we ignore it. |
| 604 if (!info) { | 604 if (!info) { |
| 605 return 0; | 605 return 0; |
| 606 } | 606 } |
| 607 | 607 |
| 608 TemplateArgs args; | 608 TemplateArgs args; |
| 609 | 609 |
| 610 if (Config::IsRawPtr(info->name()) && info->GetTemplateArgs(1, &args)) { | 610 if (Config::IsRawPtr(info->name()) && info->GetTemplateArgs(1, &args)) { |
| 611 if (Edge* ptr = CreateEdge(args[0])) | 611 if (Edge* ptr = CreateEdge(args[0])) |
| 612 return new RawPtr(ptr, true, false); | 612 return new RawPtr(ptr, true); |
| 613 return 0; | 613 return 0; |
| 614 } | 614 } |
| 615 | 615 |
| 616 if (Config::IsRefPtr(info->name()) && info->GetTemplateArgs(1, &args)) { | 616 if (Config::IsRefPtr(info->name()) && info->GetTemplateArgs(1, &args)) { |
| 617 if (Edge* ptr = CreateEdge(args[0])) | 617 if (Edge* ptr = CreateEdge(args[0])) |
| 618 return new RefPtr(ptr); | 618 return new RefPtr(ptr); |
| 619 return 0; | 619 return 0; |
| 620 } | 620 } |
| 621 | 621 |
| 622 if (Config::IsOwnPtr(info->name()) && info->GetTemplateArgs(1, &args)) { | 622 if (Config::IsOwnPtr(info->name()) && info->GetTemplateArgs(1, &args)) { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 664 edge->members().push_back(member); | 664 edge->members().push_back(member); |
| 665 } | 665 } |
| 666 // TODO: Handle the case where we fail to create an edge (eg, if the | 666 // TODO: Handle the case where we fail to create an edge (eg, if the |
| 667 // argument is a primitive type or just not fully known yet). | 667 // argument is a primitive type or just not fully known yet). |
| 668 } | 668 } |
| 669 return edge; | 669 return edge; |
| 670 } | 670 } |
| 671 | 671 |
| 672 return new Value(info); | 672 return new Value(info); |
| 673 } | 673 } |
| OLD | NEW |