| // Copyright 2018 The Fuchsia Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "src/developer/debug/zxdb/expr/found_name.h" | |
| #include <lib/syslog/cpp/macros.h> | |
| #include "src/developer/debug/zxdb/symbols/collection.h" | |
| #include "src/developer/debug/zxdb/symbols/data_member.h" | |
| #include "src/developer/debug/zxdb/symbols/variable.h" | |
| namespace zxdb { | |
| FoundName::FoundName() = default; | |
| FoundName::FoundName(Kind kind, ParsedIdentifier name) : kind_(kind), name_(std::move(name)) { | |
| // These are the only kinds that don't require other information. | |
| FX_DCHECK(kind == kNone || kind == kNamespace || kind == kTemplate); | |
| } | |
| FoundName::FoundName(const Variable* variable) : kind_(kVariable), variable_(RefPtrTo(variable)) {} | |
| FoundName::FoundName(const Function* function) : kind_(kFunction), function_(RefPtrTo(function)) {} | |
| FoundName::FoundName(const Symbol* sym) { | |
| if (const Function* fn = sym->AsFunction()) { | |
| kind_ = kFunction; | |
| function_ = RefPtrTo(fn); | |
| } else if (const Variable* var = sym->AsVariable()) { | |
| kind_ = kVariable; | |
| variable_ = RefPtrTo(var); | |
| } else { | |
| kind_ = kOtherSymbol; | |
| other_symbol_ = RefPtrTo(sym); | |
| } | |
| } | |
| FoundName::FoundName(const Variable* object_ptr, FoundMember member) | |
| : kind_(kMemberVariable), object_ptr_(RefPtrTo(object_ptr)), member_(std::move(member)) {} | |
| FoundName::FoundName(const Variable* object_ptr, InheritancePath path, | |
| const DataMember* data_member) | |
| : kind_(kMemberVariable), | |
| object_ptr_(RefPtrTo(object_ptr)), | |
| member_(std::move(path), data_member) {} | |
| FoundName::FoundName(fxl::RefPtr<Type> type) : kind_(kType), type_(std::move(type)) {} | |
| FoundName::~FoundName() = default; | |
| ParsedIdentifier FoundName::GetName() const { | |
| switch (kind_) { | |
| case kNone: | |
| break; | |
| case kVariable: | |
| return ToParsedIdentifier(variable_->GetIdentifier()); | |
| case kMemberVariable: | |
| return ToParsedIdentifier(member_.data_member()->GetIdentifier()); | |
| case kNamespace: | |
| case kTemplate: | |
| return name_; | |
| case kType: | |
| return ToParsedIdentifier(type_->GetIdentifier()); | |
| case kFunction: | |
| return ToParsedIdentifier(function_->GetIdentifier()); | |
| case kOtherSymbol: | |
| return ToParsedIdentifier(other_symbol_->GetIdentifier()); | |
| } | |
| return ParsedIdentifier(); | |
| } | |
| } // namespace zxdb |